• Non ci sono risultati.

8  Progettazione della base di dati 46 

9.2  Banca dati OMIM 65 

9.2.7  Eliminazione/merge delle tuple duplicate 84 

I dati importati da OMIM sono particolarmente complessi e la gestione delle tuple con valore dei campi source_id e source_name duplicato non può essere semplicemente demandato alla procedura descritta nel capitolo 6. Essa, infatti, fallisce nel tentativo di eseguire il merge per molte delle tuple importate. Queste tuple vengono eliminate dalle tabelle dello schema public e inserite nelle tabelle *_err dello schema log. È stato quindi necessario analizzare il motivo per il quale tali tuple sono eliminate e studiare una procedura ad hoc per recuperare il maggior numero possibile d’informazioni. Dall’analisi è emerso che i campi aventi valori contrastanti per lo stesso ID sono title, symbol e is_obsolete delle tabelle omim_gene e omim_disorder. In particolare, i valori dei campi title e symbol riferiti a uno stesso identificativo risultano contrastanti in quanto memorizzati in modo diverso nei vari file di sorgente forniti da OMIM. Per il campo is_obsolete il problema deriva dal fatto che esso è definito NOT NULL, quindi i record forniti da una sorgente diversa da omim.txt, per i quali non è rappresentata tale informazione, hanno tale campo settato di default a false; ciò rendeva quindi impossibile eseguire il merge tra i record obsoleti forniti dal file omim.txt e i record forniti dagli altri file.

della procedura DuplicatesChecker, rieseguire la procedura per l’eliminazione/merge duplicati su queste entries e reinserire i valori di title, symbol e is_obsolete prendendo solo i valori forniti dal file omim.txt, considerato il più affidabile tra quelli forniti da OMIM. Infine, occorre recuperare i valori dei campi symbol e title delle tuple non reintegrate, inserendoli nelle tabelle omim_gene_alternative e omim_disorder_alternative.

Poiché la procedura DuplicatesChecker è invocata un numero ripetuto di volte su una stessa tabella, si è scelto di utilizzare un suffisso diverso per ogni chiamata, in modo da non sovrascrivere le tabelle generate nello schema log dalla chiamata precedente.

Si elencano di seguito i vari passi seguiti e le query utilizzate per ottenere i dati importati desiderati:

1. Applicazione della procedura per il merge delle tuple duplicate alla tabella omim_gene (con suffisso "_1").

2. Inserimento in tabella omim_gene_alternative dei valori dei campi title e symbol selezionati dalla tabella omim_gene_err_1 forniti da sorgente diversa da omim.txt (in modo che possano esserne aggiornati i valori dei campi FK).

INSERT INTO omim_gene_alternative (SELECT DISTINCT omim_gene_oid, gene_title, symbol,  reference_file FROM log.omim_gene_err_1 WHERE reference_file NOT IN (SELECT  reference_file_id FROM metadata.source_reference_file WHERE imported_file_xml_id =  'omim_omimData_File'))  Figura 74 – Query utilizzata per l’inserimento dei titoli e dei simboli alternativi nella tabella  omim_gene_alternative  

3. Aggiornamento dei valori dei campi FK nelle tabelle secondarie di omim_gene.

4. Creazione della tabella omim_gene_err_1_notitle e inserimento delle entries della tabella omim_gene_err_1 in tabella omim_gene_err_1_notitle.

CREATE TABLE log.omim_gene_err_1_notitle AS (SELECT * FROM log.omim_gene_err_1)) 

Figura 75 – Query utilizzata per la creazione della tabella omim_gene_err_1_notitle  

5. Eliminazione delle colonne gene_title, symbol e is_obsolete dalla tabella omim_gene_err_1_notitle. ALTER TABLE log.omim_gene_err_1_notitle DROP COLUMN gene_title  ALTER TABLE log.omim_gene_err_1_notitle DROP COLUMN symbol  ALTER TABLE log.omim_gene_err_1_notitle DROP COLUMN is_obsolete  Figura 76 – Query utilizzate per l’eliminazione dei campi gene_title, symbol e is_obsolete dalla tabella  omim_gene_err_1_notitle 

6. Applicazione procedura DuplicatesChecker su omim_gene_err_1_notitle con suffisso "_2". La tabella omim_gene_err_1_notitle_err_1 creata nello schema log conterrà tutte le entries per le quali non è stato possibile eseguire il merge, nonostante

l’eliminazione dei campi title, symbol e is_obsolete, cioè tutte le entries eliminate in modo definitivo dalla tabella omim_gene.

7. Aggiornamento dei valori dei campi FK nelle tabelle secondarie di omim_gene, utilizzando come campo di riferimento del vincolo chiave esterna il campo omim_gene_oid della tabella omim_gene_err_1_notitle (la tabella omim_gene_err_1_notitle non è fisicamente legata a tabelle secondarie, ma le entries sulle quali è eseguito il merge sono le stesse che saranno reinserite in omim_gene, quindi i valori dei campi chiave esterna nelle tabelle secondarie di omim_gene devono essere aggiornati anche in questo caso).

8. Recupero dei campi title, symbol e is_obsolete tramite il “join” tra le tabelle omim_gene_err_1_notitle e omim_gene_err_1, considerando solo le entries aventi come file di sorgente (campo reference_file) omim.txt e creazione della tabella omim_gene_err_1_title. DROP TABLE IF EXISTS log.omim_gene_err_1_title CASCADE; CREATE TABLE  log.omim_gene_err_1_title AS (SELECT DISTINCT s1.omim_gene_oid, s1.source_id,  s1.source_name, s1.reference_file,  s1.feature_type, s1.taxonomy_id, s2.gene_title, s2.symbol,  s1.creation_date, s1.creation_author, s2.is_obsolete, s1.status, s1.comments,  s1.mouse_correlate, s1.year, s1.month, s1.day, s1.sequence_gene_type,  s1.cytogenetic_location, s1.chromosome, s1.map_entry_number,  s1.clinical_synopsys_creation_date, s1.clinical_synopsys_creation_author FROM  log.omim_gene_err_1_notitle AS s1 JOIN log.omim_gene_err_1 AS s2 ON  s1.source_id=s2.source_id AND s1.source_name=s2.source_name WHERE s2.reference_file IN  (SELECT reference_file_id FROM metadata.source_reference_file WHERE imported_file_xml_id  = 'omim_omimData_File'))  Figura 77 – Query utilizzata per la creazione della tabella omim_gene_err_1_title

9. Inserimento in omim_gene dei record di omim_gene_err_1_title.

INSERT INTO omim_gene (SELECT * FROM log.omim_gene_err_1_title) 

Figura 78 – Query utilizzata per l’inserimento delle entries della tabella omim_gene_err_1_title nella tabella  omim_gene  

10. Applicazione della procedura per l’eliminazione/emerge duplicati su omim_gene con suffisso "_3".

11. Aggiornamento dei valori dei campi FK nelle tabelle secondarie di omim_gene. 12. Rimozione dalle tabelle secondarie di omim_gene delle tuple con valori dei campi FK

non presenti in tabella principale omim_gene (e loro inserimento in tabelle *_deleted_sec).

descritti in OMIM che non risultano importati all’interno del data warehouse. Se la procedura ha avuto esito positivo tale tabella non deve contenere entries.

CREATE TABLE log.omim_gene_deleted_entries AS (SELECT a.*, b.imported_file_name FROM  log.omim_gene_err_1 AS a JOIN metadata.source_reference_file AS b on a.reference_file =  b.reference_file_id WHERE a.source_id NOT IN (SELECT source_id FROM  omim_gene)) 

Figura 79 – Query utilizzata per la creazione della tabella omim_gene_deleted_entries  

14. Applicazione dei punti precedenti (1-13) sulla tabella omim_disorder.

15. Applicazione della procedura per l’eliminazione/emerge duplicati sulla tabella omim_clinicals_synopsys .

16. Aggiornamento dei valori dei campi FK nelle tabelle secondarie di omim_clinical_synopsys.

17. Applicazione della procedura DuplicatesChecker su tutte le tabelle secondarie di OMIM (tabelle di sorgente secondarie di omim_gene e omim_disorder) e sulle tabelle *_relationship importate.

18. Abilitazione PK, FK e U su tutte le tabelle sorgenti di OMIM (in un'altra classe OmimEnableConstraints.java).

Documenti correlati