diff --git a/README.md b/README.md index 6dad103..9de78e3 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ To import the vocabulary and synthetic data manually, be sure to comment out the ### Loading Clinical Data -[Staging Tables SQL Script](./sql/OMOP_CDM_sql_server_staging_ddl_indexes.sql) is currently executed in the Terraform to aid in loading clinical data into the OMOP CDM database, where, new clinical data can be added to the target staging table and eventually migrated to the permanent clinical table using a SQL Stored Procedure or an alternative approach. You can comment out this import in the Terraform `main.tf` script (lines 154-156) if this isn't desired. +[Staging Tables SQL Script](./sql/OMOP_CDM_sql_server_staging_ddl_indexes.sql) is currently executed in the Terraform to aid in loading clinical data into the OMOP CDM database, where, new clinical data can be added to the target staging table and eventually migrated to the permanent clinical table using a [SQL Stored Procedure](./sql/SPROC_move_data_to_permanent_tables.sql) or an alternative approach. You can comment out this import in the Terraform `main.tf` script (lines 154-156) if this isn't desired. ## Using Achilles diff --git a/sql/OMOP_CDM_sql_server_staging_ddl.sql b/sql/OMOP_CDM_sql_server_staging_ddl.sql index 1fc4152..cfdea08 100644 --- a/sql/OMOP_CDM_sql_server_staging_ddl.sql +++ b/sql/OMOP_CDM_sql_server_staging_ddl.sql @@ -62,12 +62,4 @@ Standardized derived elements SELECT TOP 0 * INTO dbo.staging_condition_era FROM dbo.condition_era; -SELECT TOP 0 * INTO dbo.staging_drug_era FROM dbo.drug_era; - - -/************************ - -Helper Table to move data from staging tables to permanent tables - -************************/ -CREATE TABLE watermark_copy_staging_tables (table_name VARCHAR(MAX)) +SELECT TOP 0 * INTO dbo.staging_drug_era FROM dbo.drug_era; \ No newline at end of file diff --git a/sql/SPROC_add_indexes_constraints.sql b/sql/SPROC_add_indexes_constraints.sql new file mode 100644 index 0000000..f3bd0c2 --- /dev/null +++ b/sql/SPROC_add_indexes_constraints.sql @@ -0,0 +1,729 @@ +CREATE PROCEDURE add_indexes_constraints +AS +BEGIN + DECLARE @log_date AS NVARCHAR(50); + DECLARE @log_message NVARCHAR(512); + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' add_indexes_constraints is starting execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + -- add indices and primary keys + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ### + # # ## ## # # # # # # # # ## ## # # # # # # # # ##### ###### # # ###### #### + # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # ##### ## ##### #### + # # # # # # # # # # # # # # # ### # # # # # # # # ## # # + # # # # # # # # # # # # # # # # # ### # # # # ## # # # # # # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ### # # ##### ###### # # ###### #### + sql server script to create the required indexes within OMOP common data model, version 5.3 + last revised: 14-November-2017 + author: Patrick Ryan, Clair Blacketer + description: These primary keys and indices are considered a minimal requirement to ensure adequate performance of analyses. + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Primary key constraints + ************************* + ************************* + ************************* + ************************/ + + + + /************************ + Standardized vocabulary + ************************/ + + + + ALTER TABLE concept ADD CONSTRAINT xpk_concept PRIMARY KEY NONCLUSTERED (concept_id); + + ALTER TABLE vocabulary ADD CONSTRAINT xpk_vocabulary PRIMARY KEY NONCLUSTERED (vocabulary_id); + + ALTER TABLE domain ADD CONSTRAINT xpk_domain PRIMARY KEY NONCLUSTERED (domain_id); + + ALTER TABLE concept_class ADD CONSTRAINT xpk_concept_class PRIMARY KEY NONCLUSTERED (concept_class_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT xpk_concept_relationship PRIMARY KEY NONCLUSTERED (concept_id_1,concept_id_2,relationship_id); + + ALTER TABLE relationship ADD CONSTRAINT xpk_relationship PRIMARY KEY NONCLUSTERED (relationship_id); + + ALTER TABLE concept_ancestor ADD CONSTRAINT xpk_concept_ancestor PRIMARY KEY NONCLUSTERED (ancestor_concept_id,descendant_concept_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT xpk_source_to_concept_map PRIMARY KEY NONCLUSTERED (source_vocabulary_id,target_concept_id,source_code,valid_end_date); + + ALTER TABLE drug_strength ADD CONSTRAINT xpk_drug_strength PRIMARY KEY NONCLUSTERED (drug_concept_id, ingredient_concept_id); + + ALTER TABLE cohort_definition ADD CONSTRAINT xpk_cohort_definition PRIMARY KEY NONCLUSTERED (cohort_definition_id); + + ALTER TABLE attribute_definition ADD CONSTRAINT xpk_attribute_definition PRIMARY KEY NONCLUSTERED (attribute_definition_id); + + + /************************** + Standardized meta-data + ***************************/ + + + + /************************ + Standardized clinical data + ************************/ + + + /**PRIMARY KEY NONCLUSTERED constraints**/ + + ALTER TABLE person ADD CONSTRAINT xpk_person PRIMARY KEY NONCLUSTERED ( person_id ) ; + + ALTER TABLE observation_period ADD CONSTRAINT xpk_observation_period PRIMARY KEY NONCLUSTERED ( observation_period_id ) ; + + ALTER TABLE specimen ADD CONSTRAINT xpk_specimen PRIMARY KEY NONCLUSTERED ( specimen_id ) ; + + ALTER TABLE death ADD CONSTRAINT xpk_death PRIMARY KEY NONCLUSTERED ( person_id ) ; + + ALTER TABLE visit_occurrence ADD CONSTRAINT xpk_visit_occurrence PRIMARY KEY NONCLUSTERED ( visit_occurrence_id ) ; + + -- ALTER TABLE visit_detail ADD CONSTRAINT xpk_visit_detail PRIMARY KEY NONCLUSTERED ( visit_detail_id ) ; + + ALTER TABLE procedure_occurrence ADD CONSTRAINT xpk_procedure_occurrence PRIMARY KEY NONCLUSTERED ( procedure_occurrence_id ) ; + + ALTER TABLE drug_exposure ADD CONSTRAINT xpk_drug_exposure PRIMARY KEY NONCLUSTERED ( drug_exposure_id ) ; + + ALTER TABLE device_exposure ADD CONSTRAINT xpk_device_exposure PRIMARY KEY NONCLUSTERED ( device_exposure_id ) ; + + ALTER TABLE condition_occurrence ADD CONSTRAINT xpk_condition_occurrence PRIMARY KEY NONCLUSTERED ( condition_occurrence_id ) ; + + ALTER TABLE measurement ADD CONSTRAINT xpk_measurement PRIMARY KEY NONCLUSTERED ( measurement_id ) ; + + ALTER TABLE note ADD CONSTRAINT xpk_note PRIMARY KEY NONCLUSTERED ( note_id ) ; + + ALTER TABLE note_nlp ADD CONSTRAINT xpk_note_nlp PRIMARY KEY NONCLUSTERED ( note_nlp_id ) ; + + ALTER TABLE observation ADD CONSTRAINT xpk_observation PRIMARY KEY NONCLUSTERED ( observation_id ) ; + + + + + /************************ + Standardized health system data + ************************/ + + + ALTER TABLE location ADD CONSTRAINT xpk_location PRIMARY KEY NONCLUSTERED ( location_id ) ; + + ALTER TABLE care_site ADD CONSTRAINT xpk_care_site PRIMARY KEY NONCLUSTERED ( care_site_id ) ; + + ALTER TABLE provider ADD CONSTRAINT xpk_provider PRIMARY KEY NONCLUSTERED ( provider_id ) ; + + + + /************************ + Standardized health economics + ************************/ + + + ALTER TABLE payer_plan_period ADD CONSTRAINT xpk_payer_plan_period PRIMARY KEY NONCLUSTERED ( payer_plan_period_id ) ; + + ALTER TABLE cost ADD CONSTRAINT xpk_visit_cost PRIMARY KEY NONCLUSTERED ( cost_id ) ; + + + /************************ + Standardized derived elements + ************************/ + + ALTER TABLE cohort ADD CONSTRAINT xpk_cohort PRIMARY KEY NONCLUSTERED ( cohort_definition_id, subject_id, cohort_start_date, cohort_end_date ) ; + + ALTER TABLE cohort_attribute ADD CONSTRAINT xpk_cohort_attribute PRIMARY KEY NONCLUSTERED ( cohort_definition_id, subject_id, cohort_start_date, cohort_end_date, attribute_definition_id ) ; + + ALTER TABLE drug_era ADD CONSTRAINT xpk_drug_era PRIMARY KEY NONCLUSTERED ( drug_era_id ) ; + + ALTER TABLE dose_era ADD CONSTRAINT xpk_dose_era PRIMARY KEY NONCLUSTERED ( dose_era_id ) ; + + ALTER TABLE condition_era ADD CONSTRAINT xpk_condition_era PRIMARY KEY NONCLUSTERED ( condition_era_id ) ; + + + /************************ + ************************* + ************************* + ************************* + Indices + ************************* + ************************* + ************************* + ************************/ + + /************************ + Standardized vocabulary + ************************/ + + CREATE UNIQUE CLUSTERED INDEX idx_concept_concept_id ON concept (concept_id ASC); + CREATE INDEX idx_concept_code ON concept (concept_code ASC); + CREATE INDEX idx_concept_vocabluary_id ON concept (vocabulary_id ASC); + CREATE INDEX idx_concept_domain_id ON concept (domain_id ASC); + CREATE INDEX idx_concept_class_id ON concept (concept_class_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_vocabulary_vocabulary_id ON vocabulary (vocabulary_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_domain_domain_id ON domain (domain_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_concept_class_class_id ON concept_class (concept_class_id ASC); + + CREATE INDEX idx_concept_relationship_id_1 ON concept_relationship (concept_id_1 ASC); + CREATE INDEX idx_concept_relationship_id_2 ON concept_relationship (concept_id_2 ASC); + CREATE INDEX idx_concept_relationship_id_3 ON concept_relationship (relationship_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_relationship_rel_id ON relationship (relationship_id ASC); + + CREATE CLUSTERED INDEX idx_concept_synonym_id ON concept_synonym (concept_id ASC); + + CREATE CLUSTERED INDEX idx_concept_ancestor_id_1 ON concept_ancestor (ancestor_concept_id ASC); + CREATE INDEX idx_concept_ancestor_id_2 ON concept_ancestor (descendant_concept_id ASC); + + CREATE CLUSTERED INDEX idx_source_to_concept_map_id_3 ON source_to_concept_map (target_concept_id ASC); + CREATE INDEX idx_source_to_concept_map_id_1 ON source_to_concept_map (source_vocabulary_id ASC); + CREATE INDEX idx_source_to_concept_map_id_2 ON source_to_concept_map (target_vocabulary_id ASC); + CREATE INDEX idx_source_to_concept_map_code ON source_to_concept_map (source_code ASC); + + CREATE CLUSTERED INDEX idx_drug_strength_id_1 ON drug_strength (drug_concept_id ASC); + CREATE INDEX idx_drug_strength_id_2 ON drug_strength (ingredient_concept_id ASC); + + CREATE CLUSTERED INDEX idx_cohort_definition_id ON cohort_definition (cohort_definition_id ASC); + + CREATE CLUSTERED INDEX idx_attribute_definition_id ON attribute_definition (attribute_definition_id ASC); + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + CREATE UNIQUE CLUSTERED INDEX idx_person_id ON person (person_id ASC); + + CREATE CLUSTERED INDEX idx_observation_period_id ON observation_period (person_id ASC); + + CREATE CLUSTERED INDEX idx_specimen_person_id ON specimen (person_id ASC); + CREATE INDEX idx_specimen_concept_id ON specimen (specimen_concept_id ASC); + + CREATE CLUSTERED INDEX idx_death_person_id ON death (person_id ASC); + + CREATE CLUSTERED INDEX idx_visit_person_id ON visit_occurrence (person_id ASC); + CREATE INDEX idx_visit_concept_id ON visit_occurrence (visit_concept_id ASC); + + -- CREATE CLUSTERED INDEX idx_visit_detail_person_id ON visit_detail (person_id ASC); + -- CREATE INDEX idx_visit_detail_concept_id ON visit_detail (visit_detail_concept_id ASC); + + CREATE CLUSTERED INDEX idx_procedure_person_id ON procedure_occurrence (person_id ASC); + CREATE INDEX idx_procedure_concept_id ON procedure_occurrence (procedure_concept_id ASC); + CREATE INDEX idx_procedure_visit_id ON procedure_occurrence (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_drug_person_id ON drug_exposure (person_id ASC); + CREATE INDEX idx_drug_concept_id ON drug_exposure (drug_concept_id ASC); + CREATE INDEX idx_drug_visit_id ON drug_exposure (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_device_person_id ON device_exposure (person_id ASC); + CREATE INDEX idx_device_concept_id ON device_exposure (device_concept_id ASC); + CREATE INDEX idx_device_visit_id ON device_exposure (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_condition_person_id ON condition_occurrence (person_id ASC); + CREATE INDEX idx_condition_concept_id ON condition_occurrence (condition_concept_id ASC); + CREATE INDEX idx_condition_visit_id ON condition_occurrence (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_measurement_person_id ON measurement (person_id ASC); + CREATE INDEX idx_measurement_concept_id ON measurement (measurement_concept_id ASC); + CREATE INDEX idx_measurement_visit_id ON measurement (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_note_person_id ON note (person_id ASC); + CREATE INDEX idx_note_concept_id ON note (note_type_concept_id ASC); + CREATE INDEX idx_note_visit_id ON note (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_note_nlp_note_id ON note_nlp (note_id ASC); + CREATE INDEX idx_note_nlp_concept_id ON note_nlp (note_nlp_concept_id ASC); + + CREATE CLUSTERED INDEX idx_observation_person_id ON observation (person_id ASC); + CREATE INDEX idx_observation_concept_id ON observation (observation_concept_id ASC); + CREATE INDEX idx_observation_visit_id ON observation (visit_occurrence_id ASC); + + CREATE INDEX idx_fact_relationship_id_1 ON fact_relationship (domain_concept_id_1 ASC); + CREATE INDEX idx_fact_relationship_id_2 ON fact_relationship (domain_concept_id_2 ASC); + CREATE INDEX idx_fact_relationship_id_3 ON fact_relationship (relationship_concept_id ASC); + + + + /************************ + Standardized health system data + ************************/ + + + + + + /************************ + Standardized health economics + ************************/ + + CREATE CLUSTERED INDEX idx_period_person_id ON payer_plan_period (person_id ASC); + + + + + + /************************ + Standardized derived elements + ************************/ + + + CREATE INDEX idx_cohort_subject_id ON cohort (subject_id ASC); + CREATE INDEX idx_cohort_c_definition_id ON cohort (cohort_definition_id ASC); + + CREATE INDEX idx_ca_subject_id ON cohort_attribute (subject_id ASC); + CREATE INDEX idx_ca_definition_id ON cohort_attribute (cohort_definition_id ASC); + + CREATE CLUSTERED INDEX idx_drug_era_person_id ON drug_era (person_id ASC); + CREATE INDEX idx_drug_era_concept_id ON drug_era (drug_concept_id ASC); + + CREATE CLUSTERED INDEX idx_dose_era_person_id ON dose_era (person_id ASC); + CREATE INDEX idx_dose_era_concept_id ON dose_era (drug_concept_id ASC); + + CREATE CLUSTERED INDEX idx_condition_era_person_id ON condition_era (person_id ASC); + CREATE INDEX idx_condition_era_concept_id ON condition_era (condition_concept_id ASC); + -- add foreign key constraints + + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ##### + # # ## ## # # # # # # # # ## ## # # # # # # # #### # # #### ##### ##### ## # # # ##### #### + # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # ## # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # #### # # # # # # # # # # #### + # # # # # # # # # # # # # # # ### # # # # # # # # # ##### ###### # # # # # # + # # # # # # # # # # # # # # # # # ### # # # # # # # ## # # # # # # # # # ## # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ##### #### # # #### # # # # # # # # # #### + sql server script to create foreign key constraints within OMOP common data model, version 5.3.0 + last revised: 14-June-2018 + author: Patrick Ryan, Clair Blacketer + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Foreign key constraints + ************************* + ************************* + ************************* + ************************/ + + + /************************ + Standardized vocabulary + ************************/ + + + ALTER TABLE concept ADD CONSTRAINT fpk_concept_domain FOREIGN KEY (domain_id) REFERENCES domain (domain_id); + + ALTER TABLE concept ADD CONSTRAINT fpk_concept_class FOREIGN KEY (concept_class_id) REFERENCES concept_class (concept_class_id); + + ALTER TABLE concept ADD CONSTRAINT fpk_concept_vocabulary FOREIGN KEY (vocabulary_id) REFERENCES vocabulary (vocabulary_id); + + ALTER TABLE vocabulary ADD CONSTRAINT fpk_vocabulary_concept FOREIGN KEY (vocabulary_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE domain ADD CONSTRAINT fpk_domain_concept FOREIGN KEY (domain_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_class ADD CONSTRAINT fpk_concept_class_concept FOREIGN KEY (concept_class_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT fpk_concept_relationship_c_1 FOREIGN KEY (concept_id_1) REFERENCES concept (concept_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT fpk_concept_relationship_c_2 FOREIGN KEY (concept_id_2) REFERENCES concept (concept_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT fpk_concept_relationship_id FOREIGN KEY (relationship_id) REFERENCES relationship (relationship_id); + + ALTER TABLE relationship ADD CONSTRAINT fpk_relationship_concept FOREIGN KEY (relationship_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE relationship ADD CONSTRAINT fpk_relationship_reverse FOREIGN KEY (reverse_relationship_id) REFERENCES relationship (relationship_id); + + ALTER TABLE concept_synonym ADD CONSTRAINT fpk_concept_synonym_concept FOREIGN KEY (concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_synonym ADD CONSTRAINT fpk_concept_synonym_language FOREIGN KEY (language_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_ancestor ADD CONSTRAINT fpk_concept_ancestor_concept_1 FOREIGN KEY (ancestor_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_ancestor ADD CONSTRAINT fpk_concept_ancestor_concept_2 FOREIGN KEY (descendant_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_to_concept_map_v_1 FOREIGN KEY (source_vocabulary_id) REFERENCES vocabulary (vocabulary_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_concept_id FOREIGN KEY (source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_to_concept_map_v_2 FOREIGN KEY (target_vocabulary_id) REFERENCES vocabulary (vocabulary_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_to_concept_map_c_1 FOREIGN KEY (target_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_concept_1 FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_concept_2 FOREIGN KEY (ingredient_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_unit_1 FOREIGN KEY (amount_unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_unit_2 FOREIGN KEY (numerator_unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_unit_3 FOREIGN KEY (denominator_unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE cohort_definition ADD CONSTRAINT fpk_cohort_definition_concept FOREIGN KEY (definition_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE cohort_definition ADD CONSTRAINT fpk_cohort_subject_concept FOREIGN KEY (subject_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE attribute_definition ADD CONSTRAINT fpk_attribute_type_concept FOREIGN KEY (attribute_type_concept_id) REFERENCES concept (concept_id); + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + -- ALTER TABLE person ADD CONSTRAINT fpk_person_gender_concept FOREIGN KEY (gender_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE person ADD CONSTRAINT fpk_person_race_concept FOREIGN KEY (race_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE person ADD CONSTRAINT fpk_person_ethnicity_concept FOREIGN KEY (ethnicity_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE person ADD CONSTRAINT fpk_person_gender_concept_s FOREIGN KEY (gender_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE person ADD CONSTRAINT fpk_person_race_concept_s FOREIGN KEY (race_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE person ADD CONSTRAINT fpk_person_ethnicity_concept_s FOREIGN KEY (ethnicity_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_location FOREIGN KEY (location_id) REFERENCES location (location_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_observation_period_person". The conflict occurred in database "ss-sql", table "dbo.person", column 'person_id'. + + -- ALTER TABLE observation_period ADD CONSTRAINT fpk_observation_period_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE observation_period ADD CONSTRAINT fpk_observation_period_concept FOREIGN KEY (period_type_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_concept FOREIGN KEY (specimen_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_type_concept FOREIGN KEY (specimen_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_unit_concept FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_site_concept FOREIGN KEY (anatomic_site_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_status_concept FOREIGN KEY (disease_status_concept_id) REFERENCES concept (concept_id); + + + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_death_person". The conflict occurred in database "ss-sql", table "dbo.person", column 'person_id'. + -- ALTER TABLE death ADD CONSTRAINT fpk_death_person FOREIGN KEY (person_id) REFERENCES person (person_id); + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_death_type_concept". The conflict occurred in database "ss-sql", table "dbo.concept", column 'concept_id'. + -- ALTER TABLE death ADD CONSTRAINT fpk_death_type_concept FOREIGN KEY (death_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE death ADD CONSTRAINT fpk_death_cause_concept FOREIGN KEY (cause_concept_id) REFERENCES concept (concept_id); + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_death_cause_concept_s". The conflict occurred in database "ss-sql", table "dbo.concept", column 'concept_id'. + -- ALTER TABLE death ADD CONSTRAINT fpk_death_cause_concept_s FOREIGN KEY (cause_source_concept_id) REFERENCES concept (concept_id); + + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_visit_person". The conflict occurred in database "ss-sql", table "dbo.person", column 'person_id'. + -- ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_person FOREIGN KEY (person_id) REFERENCES person (person_id); + -- ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_type_concept FOREIGN KEY (visit_type_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + -- -- TODO + -- ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_concept_s FOREIGN KEY (visit_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_admitting_s FOREIGN KEY (admitting_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_discharge FOREIGN KEY (discharge_to_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_preceding FOREIGN KEY (preceding_visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_type_concept FOREIGN KEY (visit_detail_type_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_concept_s FOREIGN KEY (visit_detail_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_admitting_s FOREIGN KEY (admitting_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_discharge FOREIGN KEY (discharge_to_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_preceding FOREIGN KEY (preceding_visit_detail_id) REFERENCES visit_detail (visit_detail_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_parent FOREIGN KEY (visit_detail_parent_id) REFERENCES visit_detail (visit_detail_id); + + -- ALTER TABLE visit_detail ADD CONSTRAINT fpd_v_detail_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + -- ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_concept FOREIGN KEY (procedure_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_type_concept FOREIGN KEY (procedure_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_modifier FOREIGN KEY (modifier_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + -- ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_concept_s FOREIGN KEY (procedure_source_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_concept FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_type_concept FOREIGN KEY (drug_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_route_concept FOREIGN KEY (route_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + -- ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_concept_s FOREIGN KEY (drug_source_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_concept FOREIGN KEY (device_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_type_concept FOREIGN KEY (device_type_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + -- ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_concept_s FOREIGN KEY (device_source_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_concept FOREIGN KEY (condition_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_type_concept FOREIGN KEY (condition_type_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + -- ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_concept_s FOREIGN KEY (condition_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_status_concept FOREIGN KEY (condition_status_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_concept FOREIGN KEY (measurement_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_type_concept FOREIGN KEY (measurement_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_operator FOREIGN KEY (operator_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_value FOREIGN KEY (value_as_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_unit FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + -- ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_concept_s FOREIGN KEY (measurement_source_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE note ADD CONSTRAINT fpk_note_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_type_concept FOREIGN KEY (note_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_class_concept FOREIGN KEY (note_class_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_encoding_concept FOREIGN KEY (encoding_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_language_concept FOREIGN KEY (language_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + ALTER TABLE note_nlp ADD CONSTRAINT fpk_note_nlp_note FOREIGN KEY (note_id) REFERENCES note (note_id); + + ALTER TABLE note_nlp ADD CONSTRAINT fpk_note_nlp_section_concept FOREIGN KEY (section_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note_nlp ADD CONSTRAINT fpk_note_nlp_concept FOREIGN KEY (note_nlp_concept_id) REFERENCES concept (concept_id); + + + + -- ALTER TABLE observation ADD CONSTRAINT fpk_observation_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE observation ADD CONSTRAINT fpk_observation_concept FOREIGN KEY (observation_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE observation ADD CONSTRAINT fpk_observation_type_concept FOREIGN KEY (observation_type_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE observation ADD CONSTRAINT fpk_observation_value FOREIGN KEY (value_as_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_qualifier FOREIGN KEY (qualifier_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_unit FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE observation ADD CONSTRAINT fpk_observation_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + -- ALTER TABLE observation ADD CONSTRAINT fpk_observation_concept_s FOREIGN KEY (observation_source_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE fact_relationship ADD CONSTRAINT fpk_fact_domain_1 FOREIGN KEY (domain_concept_id_1) REFERENCES concept (concept_id); + + ALTER TABLE fact_relationship ADD CONSTRAINT fpk_fact_domain_2 FOREIGN KEY (domain_concept_id_2) REFERENCES concept (concept_id); + + ALTER TABLE fact_relationship ADD CONSTRAINT fpk_fact_relationship FOREIGN KEY (relationship_concept_id) REFERENCES concept (concept_id); + + + + /************************ + Standardized health system data + ************************/ + + ALTER TABLE care_site ADD CONSTRAINT fpk_care_site_location FOREIGN KEY (location_id) REFERENCES location (location_id); + + -- ALTER TABLE care_site ADD CONSTRAINT fpk_care_site_place FOREIGN KEY (place_of_service_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE provider ADD CONSTRAINT fpk_provider_specialty FOREIGN KEY (specialty_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE provider ADD CONSTRAINT fpk_provider_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + -- ALTER TABLE provider ADD CONSTRAINT fpk_provider_gender FOREIGN KEY (gender_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE provider ADD CONSTRAINT fpk_provider_specialty_s FOREIGN KEY (specialty_source_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE provider ADD CONSTRAINT fpk_provider_gender_s FOREIGN KEY (gender_source_concept_id) REFERENCES concept (concept_id); + + + + + /************************ + Standardized health economics + ************************/ + + -- ALTER TABLE payer_plan_period ADD CONSTRAINT fpk_payer_plan_period FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE cost ADD CONSTRAINT fpk_visit_cost_currency FOREIGN KEY (currency_concept_id) REFERENCES concept (concept_id); + + -- ALTER TABLE cost ADD CONSTRAINT fpk_visit_cost_period FOREIGN KEY (payer_plan_period_id) REFERENCES payer_plan_period (payer_plan_period_id); + + -- ALTER TABLE cost ADD CONSTRAINT fpk_drg_concept FOREIGN KEY (drg_concept_id) REFERENCES concept (concept_id); + + /************************ + Standardized derived elements + ************************/ + + + --ALTER TABLE cohort ADD CONSTRAINT fpk_cohort_definition FOREIGN KEY (cohort_definition_id) REFERENCES cohort_definition (cohort_definition_id); + + + ALTER TABLE cohort_attribute ADD CONSTRAINT fpk_ca_cohort_definition FOREIGN KEY (cohort_definition_id) REFERENCES cohort_definition (cohort_definition_id); + + ALTER TABLE cohort_attribute ADD CONSTRAINT fpk_ca_attribute_definition FOREIGN KEY (attribute_definition_id) REFERENCES attribute_definition (attribute_definition_id); + + ALTER TABLE cohort_attribute ADD CONSTRAINT fpk_ca_value FOREIGN KEY (value_as_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE drug_era ADD CONSTRAINT fpk_drug_era_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE drug_era ADD CONSTRAINT fpk_drug_era_concept FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE dose_era ADD CONSTRAINT fpk_dose_era_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE dose_era ADD CONSTRAINT fpk_dose_era_concept FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE dose_era ADD CONSTRAINT fpk_dose_era_unit_concept FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + + -- ALTER TABLE condition_era ADD CONSTRAINT fpk_condition_era_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + -- ALTER TABLE condition_era ADD CONSTRAINT fpk_condition_era_concept FOREIGN KEY (condition_concept_id) REFERENCES concept (concept_id); + + + /************************ + ************************* + ************************* + ************************* + Unique constraints + ************************* + ************************* + ************************* + ************************/ + + ALTER TABLE concept_synonym ADD CONSTRAINT uq_concept_synonym UNIQUE (concept_id, concept_synonym_name, language_concept_id); + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' add_indexes_constraints is ending execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT +END + diff --git a/sql/SPROC_move_data_to_permanent_tables.sql b/sql/SPROC_move_data_to_permanent_tables.sql new file mode 100644 index 0000000..2daf390 --- /dev/null +++ b/sql/SPROC_move_data_to_permanent_tables.sql @@ -0,0 +1,111 @@ +CREATE PROCEDURE move_data_to_permanent_tables @watermark_table NVARCHAR(100) +AS + -- SET XACT_ABORT ON will cause the transaction to be uncommittable + -- when the constraint violation occurs. + SET XACT_ABORT ON; + BEGIN TRANSACTION move_data_to_permanent_tables + BEGIN TRY + DECLARE @current_table_name VARCHAR(MAX); + DECLARE @staging_table_name VARCHAR(MAX); + DECLARE @log_date AS NVARCHAR(50); + DECLARE @log_message NVARCHAR(512); + SET @current_table_name = '' + + -- The use of RAISERROR with the NOWAIT option shouldn't actually be emitting an exception as you might expect. It's used + -- to immediately emmit log/console messages. For additional details, see + -- https://www.mssqltips.com/sqlservertip/1660/using-the-nowait-option-with-the-sql-server-raiserror-statement/ + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is starting execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is removing all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + EXEC dbo.remove_indexes_constraints; + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables removed all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + DECLARE @cursor_sql VARCHAR(MAX) + SET @cursor_sql = 'DECLARE omop_tables_cursor CURSOR FOR SELECT table_name FROM ' + @watermark_table + EXEC(@cursor_sql) + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is moving data for tables in ' + @watermark_table + RAISERROR (@log_message, 0, 1) WITH NOWAIT + -- https://www.mssqltips.com/sqlservertip/1599/cursor-in-sql-server/ + OPEN omop_tables_cursor + FETCH NEXT FROM omop_tables_cursor INTO @current_table_name + + WHILE @@FETCH_STATUS = 0 + + BEGIN + DECLARE @truncate_sql VARCHAR(MAX) + DECLARE @switch_sql VARCHAR(MAX) + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is truncating table ' + @current_table_name + RAISERROR (@log_message, 0, 1) WITH NOWAIT + SET @truncate_sql = 'TRUNCATE TABLE ' + @current_table_name + SET @staging_table_name = 'staging_' + @current_table_name + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is moving data from staging to ' + @current_table_name + RAISERROR (@log_message, 0, 1) WITH NOWAIT + SET @switch_sql = 'ALTER TABLE ' + @staging_table_name + ' SWITCH TO ' + @current_table_name + EXEC (@truncate_sql) + EXEC (@switch_sql) + FETCH NEXT FROM omop_tables_cursor INTO @current_table_name; + END + CLOSE omop_tables_cursor; + DEALLOCATE omop_tables_cursor; + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables moved all data from staging for tables in ' + @watermark_table + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is applying all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + EXEC dbo.add_indexes_constraints; + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables applied all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + COMMIT TRANSACTION move_data_to_permanent_tables; + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is ending execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + RETURN 1; + END TRY + BEGIN CATCH + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables entered catch block' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + IF (SELECT CURSOR_STATUS('global','omop_tables_cursor')) >= -1 + BEGIN + DEALLOCATE omop_tables_cursor; + END + + -- Transaction uncommittable + IF (XACT_STATE()) = -1 + BEGIN + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is rolling back transaction' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + ROLLBACK TRANSACTION move_data_to_permanent_tables; + THROW; + END + -- Transaction committable + IF (XACT_STATE()) = 1 + BEGIN + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is committing transaction' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + COMMIT TRANSACTION move_data_to_permanent_tables; + END + + END CATCH; + +GO diff --git a/sql/SPROC_remove_indexes_constraints.sql b/sql/SPROC_remove_indexes_constraints.sql new file mode 100644 index 0000000..8da7e02 --- /dev/null +++ b/sql/SPROC_remove_indexes_constraints.sql @@ -0,0 +1,726 @@ +CREATE PROCEDURE remove_indexes_constraints +AS +BEGIN + DECLARE @log_date AS NVARCHAR(50); + DECLARE @log_message NVARCHAR(512); + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' remove_indexes_constraints is starting execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + -- add foreign key constraints + + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ##### + # # ## ## # # # # # # # # ## ## # # # # # # # #### # # #### ##### ##### ## # # # ##### #### + # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # ## # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # #### # # # # # # # # # # #### + # # # # # # # # # # # # # # # ### # # # # # # # # # ##### ###### # # # # # # + # # # # # # # # # # # # # # # # # ### # # # # # # # ## # # # # # # # # # ## # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ##### #### # # #### # # # # # # # # # #### + sql server script to create foreign key constraints within OMOP common data model, version 5.3.0 + last revised: 14-June-2018 + author: Patrick Ryan, Clair Blacketer + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Foreign key constraints + ************************* + ************************* + ************************* + ************************/ + + + /************************ + Standardized vocabulary + ************************/ + + + ALTER TABLE concept DROP CONSTRAINT fpk_concept_domain; + + ALTER TABLE concept DROP CONSTRAINT fpk_concept_class; + + ALTER TABLE concept DROP CONSTRAINT fpk_concept_vocabulary; + + ALTER TABLE vocabulary DROP CONSTRAINT fpk_vocabulary_concept; + + ALTER TABLE domain DROP CONSTRAINT fpk_domain_concept; + + ALTER TABLE concept_class DROP CONSTRAINT fpk_concept_class_concept; + + ALTER TABLE concept_relationship DROP CONSTRAINT fpk_concept_relationship_c_1; + + ALTER TABLE concept_relationship DROP CONSTRAINT fpk_concept_relationship_c_2; + + ALTER TABLE concept_relationship DROP CONSTRAINT fpk_concept_relationship_id; + + ALTER TABLE relationship DROP CONSTRAINT fpk_relationship_concept; + + ALTER TABLE relationship DROP CONSTRAINT fpk_relationship_reverse; + + ALTER TABLE concept_synonym DROP CONSTRAINT fpk_concept_synonym_concept; + + ALTER TABLE concept_synonym DROP CONSTRAINT fpk_concept_synonym_language; + + ALTER TABLE concept_ancestor DROP CONSTRAINT fpk_concept_ancestor_concept_1; + + ALTER TABLE concept_ancestor DROP CONSTRAINT fpk_concept_ancestor_concept_2; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_to_concept_map_v_1; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_concept_id; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_to_concept_map_v_2; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_to_concept_map_c_1; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_concept_1; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_concept_2; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_unit_1; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_unit_2; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_unit_3; + + ALTER TABLE cohort_definition DROP CONSTRAINT fpk_cohort_definition_concept; + + ALTER TABLE cohort_definition DROP CONSTRAINT fpk_cohort_subject_concept; + + ALTER TABLE attribute_definition DROP CONSTRAINT fpk_attribute_type_concept; + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + -- ALTER TABLE person DROP CONSTRAINT fpk_person_gender_concept; + + -- ALTER TABLE person DROP CONSTRAINT fpk_person_race_concept; + + -- ALTER TABLE person DROP CONSTRAINT fpk_person_ethnicity_concept; + + -- ALTER TABLE person DROP CONSTRAINT fpk_person_gender_concept_s; + + -- ALTER TABLE person DROP CONSTRAINT fpk_person_race_concept_s; + + -- ALTER TABLE person DROP CONSTRAINT fpk_person_ethnicity_concept_s; + + ALTER TABLE person DROP CONSTRAINT fpk_person_location; + + ALTER TABLE person DROP CONSTRAINT fpk_person_provider; + + ALTER TABLE person DROP CONSTRAINT fpk_person_care_site; + + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_observation_period_person". The conflict occurred in database "ss-sql", table "dbo.person", column 'person_id'. + -- ALTER TABLE observation_period DROP CONSTRAINT fpk_observation_period_person; + + -- ALTER TABLE observation_period DROP CONSTRAINT fpk_observation_period_concept; + + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_person; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_type_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_unit_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_site_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_status_concept; + + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_death_person". The conflict occurred in database "ss-sql", table "dbo.person", column 'person_id'. + -- ALTER TABLE death DROP CONSTRAINT fpk_death_person; + -- TODO: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fpk_death_type_concept". The conflict occurred in database "ss-sql", table "dbo.concept", column 'concept_id'. + -- ALTER TABLE death DROP CONSTRAINT fpk_death_type_concept; + + ALTER TABLE death DROP CONSTRAINT fpk_death_cause_concept; + + -- ALTER TABLE death DROP CONSTRAINT fpk_death_cause_concept_s; + + -- ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_person; + + -- ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_type_concept; + + -- ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_provider; + + -- ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_care_site; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_concept_s; + + -- ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_admitting_s; + + -- ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_discharge; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_preceding; + + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_person; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_type_concept; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_provider; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_care_site; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_concept_s; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_admitting_s; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_discharge; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_preceding; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_parent; + + -- ALTER TABLE visit_detail DROP CONSTRAINT fpd_v_detail_visit; + + + -- ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_person; + + -- ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_concept; + + -- ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_type_concept; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_modifier; + + -- ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_provider; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_visit; + + -- ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_concept_s; + + + -- ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_person; + + -- ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_concept; + + -- ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_type_concept; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_route_concept; + + -- ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_provider; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_visit; + + -- ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_concept_s; + + + -- ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_person; + + -- ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_concept; + + -- ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_type_concept; + + -- ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_provider; + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_visit; + + -- ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_concept_s; + + + -- ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_person; + + -- ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_concept; + + -- ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_type_concept; + + -- ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_provider; + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_visit; + + -- ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_concept_s; + + -- ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_status_concept; + + + -- ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_person; + + -- ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_concept; + + -- ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_type_concept; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_operator; + + -- ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_value; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_unit; + + -- ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_provider; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_visit; + + -- ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_concept_s; + + + ALTER TABLE note DROP CONSTRAINT fpk_note_person; + + ALTER TABLE note DROP CONSTRAINT fpk_note_type_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_note_class_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_note_encoding_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_language_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_note_provider; + + ALTER TABLE note DROP CONSTRAINT fpk_note_visit; + + + ALTER TABLE note_nlp DROP CONSTRAINT fpk_note_nlp_note; + + ALTER TABLE note_nlp DROP CONSTRAINT fpk_note_nlp_section_concept; + + ALTER TABLE note_nlp DROP CONSTRAINT fpk_note_nlp_concept; + + + + -- ALTER TABLE observation DROP CONSTRAINT fpk_observation_person; + + -- ALTER TABLE observation DROP CONSTRAINT fpk_observation_concept; + + -- ALTER TABLE observation DROP CONSTRAINT fpk_observation_type_concept; + + -- ALTER TABLE observation DROP CONSTRAINT fpk_observation_value; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_qualifier; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_unit; + + -- ALTER TABLE observation DROP CONSTRAINT fpk_observation_provider; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_visit; + + -- ALTER TABLE observation DROP CONSTRAINT fpk_observation_concept_s; + + + ALTER TABLE fact_relationship DROP CONSTRAINT fpk_fact_domain_1; + + ALTER TABLE fact_relationship DROP CONSTRAINT fpk_fact_domain_2; + + ALTER TABLE fact_relationship DROP CONSTRAINT fpk_fact_relationship; + + + + /************************ + Standardized health system data + ************************/ + + ALTER TABLE care_site DROP CONSTRAINT fpk_care_site_location; + + -- ALTER TABLE care_site DROP CONSTRAINT fpk_care_site_place; + + + -- ALTER TABLE provider DROP CONSTRAINT fpk_provider_specialty; + + -- ALTER TABLE provider DROP CONSTRAINT fpk_provider_care_site; + + -- ALTER TABLE provider DROP CONSTRAINT fpk_provider_gender; + + -- ALTER TABLE provider DROP CONSTRAINT fpk_provider_specialty_s; + + -- ALTER TABLE provider DROP CONSTRAINT fpk_provider_gender_s; + + + + + /************************ + Standardized health economics + ************************/ + + -- ALTER TABLE payer_plan_period DROP CONSTRAINT fpk_payer_plan_period; + + -- ALTER TABLE cost DROP CONSTRAINT fpk_visit_cost_currency; + + -- ALTER TABLE cost DROP CONSTRAINT fpk_visit_cost_period; + + -- ALTER TABLE cost DROP CONSTRAINT fpk_drg_concept; + + /************************ + Standardized derived elements + ************************/ + + + --ALTER TABLE cohort DROP CONSTRAINT fpk_cohort_definition; + + + ALTER TABLE cohort_attribute DROP CONSTRAINT fpk_ca_cohort_definition; + + ALTER TABLE cohort_attribute DROP CONSTRAINT fpk_ca_attribute_definition; + + ALTER TABLE cohort_attribute DROP CONSTRAINT fpk_ca_value; + + + -- ALTER TABLE drug_era DROP CONSTRAINT fpk_drug_era_person; + + -- ALTER TABLE drug_era DROP CONSTRAINT fpk_drug_era_concept; + + + ALTER TABLE dose_era DROP CONSTRAINT fpk_dose_era_person; + + ALTER TABLE dose_era DROP CONSTRAINT fpk_dose_era_concept; + + ALTER TABLE dose_era DROP CONSTRAINT fpk_dose_era_unit_concept; + + + -- ALTER TABLE condition_era DROP CONSTRAINT fpk_condition_era_person; + + -- ALTER TABLE condition_era DROP CONSTRAINT fpk_condition_era_concept; + + + /************************ + ************************* + ************************* + ************************* + Unique constraints + ************************* + ************************* + ************************* + ************************/ + + ALTER TABLE concept_synonym DROP CONSTRAINT uq_concept_synonym; + + -- add indices and primary keys + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ### + # # ## ## # # # # # # # # ## ## # # # # # # # # ##### ###### # # ###### #### + # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # ##### ## ##### #### + # # # # # # # # # # # # # # # ### # # # # # # # # ## # # + # # # # # # # # # # # # # # # # # ### # # # # ## # # # # # # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ### # # ##### ###### # # ###### #### + sql server script to create the required indexes within OMOP common data model, version 5.3 + last revised: 14-November-2017 + author: Patrick Ryan, Clair Blacketer + description: These primary keys and indices are considered a minimal requirement to ensure adequate performance of analyses. + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Primary key constraints + ************************* + ************************* + ************************* + ************************/ + + + + /************************ + Standardized vocabulary + ************************/ + + + + ALTER TABLE concept DROP CONSTRAINT xpk_concept; + + ALTER TABLE vocabulary DROP CONSTRAINT xpk_vocabulary; + +-- Msg 3725, Level 16, State 0, Line 1 The constraint 'xpk_domain' is being referenced by table 'concept', foreign key constraint 'fpk_concept_domain'. + ALTER TABLE domain DROP CONSTRAINT xpk_domain; + + ALTER TABLE concept_class DROP CONSTRAINT xpk_concept_class; + + ALTER TABLE concept_relationship DROP CONSTRAINT xpk_concept_relationship; + + ALTER TABLE relationship DROP CONSTRAINT xpk_relationship; + + ALTER TABLE concept_ancestor DROP CONSTRAINT xpk_concept_ancestor; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT xpk_source_to_concept_map; + + ALTER TABLE drug_strength DROP CONSTRAINT xpk_drug_strength; + + ALTER TABLE cohort_definition DROP CONSTRAINT xpk_cohort_definition; + + ALTER TABLE attribute_definition DROP CONSTRAINT xpk_attribute_definition; + + + /************************** + Standardized meta-data + ***************************/ + + + + /************************ + Standardized clinical data + ************************/ + + + /**PRIMARY KEY NONCLUSTERED constraints**/ + + ALTER TABLE person DROP CONSTRAINT xpk_person; + + ALTER TABLE observation_period DROP CONSTRAINT xpk_observation_period; + + ALTER TABLE specimen DROP CONSTRAINT xpk_specimen; + + ALTER TABLE death DROP CONSTRAINT xpk_death; + + ALTER TABLE visit_occurrence DROP CONSTRAINT xpk_visit_occurrence; + + -- ALTER TABLE visit_detail DROP CONSTRAINT xpk_visit_detail; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT xpk_procedure_occurrence; + + ALTER TABLE drug_exposure DROP CONSTRAINT xpk_drug_exposure; + + ALTER TABLE device_exposure DROP CONSTRAINT xpk_device_exposure; + + ALTER TABLE condition_occurrence DROP CONSTRAINT xpk_condition_occurrence; + + ALTER TABLE measurement DROP CONSTRAINT xpk_measurement; + + ALTER TABLE note DROP CONSTRAINT xpk_note; + + ALTER TABLE note_nlp DROP CONSTRAINT xpk_note_nlp; + + ALTER TABLE observation DROP CONSTRAINT xpk_observation; + + + + + /************************ + Standardized health system data + ************************/ + + + ALTER TABLE location DROP CONSTRAINT xpk_location; + + ALTER TABLE care_site DROP CONSTRAINT xpk_care_site; + + ALTER TABLE provider DROP CONSTRAINT xpk_provider; + + + + /************************ + Standardized health economics + ************************/ + + + ALTER TABLE payer_plan_period DROP CONSTRAINT xpk_payer_plan_period; + + ALTER TABLE cost DROP CONSTRAINT xpk_visit_cost; + + + /************************ + Standardized derived elements + ************************/ + + ALTER TABLE cohort DROP CONSTRAINT xpk_cohort; + + ALTER TABLE cohort_attribute DROP CONSTRAINT xpk_cohort_attribute; + + ALTER TABLE drug_era DROP CONSTRAINT xpk_drug_era; + + ALTER TABLE dose_era DROP CONSTRAINT xpk_dose_era; + + ALTER TABLE condition_era DROP CONSTRAINT xpk_condition_era; + + + /************************ + ************************* + ************************* + ************************* + Indices + ************************* + ************************* + ************************* + ************************/ + + /************************ + Standardized vocabulary + ************************/ + + DROP INDEX idx_concept_concept_id ON concept; + DROP INDEX idx_concept_code ON concept; + DROP INDEX idx_concept_vocabluary_id ON concept; + DROP INDEX idx_concept_domain_id ON concept; + DROP INDEX idx_concept_class_id ON concept; + + DROP INDEX idx_vocabulary_vocabulary_id ON vocabulary; + + DROP INDEX idx_domain_domain_id ON domain; + + DROP INDEX idx_concept_class_class_id ON concept_class; + + DROP INDEX idx_concept_relationship_id_1 ON concept_relationship; + DROP INDEX idx_concept_relationship_id_2 ON concept_relationship; + DROP INDEX idx_concept_relationship_id_3 ON concept_relationship; + + DROP INDEX idx_relationship_rel_id ON relationship; + + DROP INDEX idx_concept_synonym_id ON concept_synonym; + + DROP INDEX idx_concept_ancestor_id_1 ON concept_ancestor; + DROP INDEX idx_concept_ancestor_id_2 ON concept_ancestor; + + DROP INDEX idx_source_to_concept_map_id_3 ON source_to_concept_map; + DROP INDEX idx_source_to_concept_map_id_1 ON source_to_concept_map; + DROP INDEX idx_source_to_concept_map_id_2 ON source_to_concept_map; + DROP INDEX idx_source_to_concept_map_code ON source_to_concept_map; + + DROP INDEX idx_drug_strength_id_1 ON drug_strength; + DROP INDEX idx_drug_strength_id_2 ON drug_strength; + + DROP INDEX idx_cohort_definition_id ON cohort_definition; + + DROP INDEX idx_attribute_definition_id ON attribute_definition; + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + DROP INDEX idx_person_id ON person; + + DROP INDEX idx_observation_period_id ON observation_period; + + DROP INDEX idx_specimen_person_id ON specimen; + DROP INDEX idx_specimen_concept_id ON specimen; + + DROP INDEX idx_death_person_id ON death; + + DROP INDEX idx_visit_person_id ON visit_occurrence; + DROP INDEX idx_visit_concept_id ON visit_occurrence; + + -- DROP INDEX idx_visit_detail_person_id ON visit_detail; + -- DROP INDEX idx_visit_detail_concept_id ON visit_detail; + + DROP INDEX idx_procedure_person_id ON procedure_occurrence; + DROP INDEX idx_procedure_concept_id ON procedure_occurrence; + DROP INDEX idx_procedure_visit_id ON procedure_occurrence; + + DROP INDEX idx_drug_person_id ON drug_exposure; + DROP INDEX idx_drug_concept_id ON drug_exposure; + DROP INDEX idx_drug_visit_id ON drug_exposure; + + DROP INDEX idx_device_person_id ON device_exposure; + DROP INDEX idx_device_concept_id ON device_exposure; + DROP INDEX idx_device_visit_id ON device_exposure; + + DROP INDEX idx_condition_person_id ON condition_occurrence; + DROP INDEX idx_condition_concept_id ON condition_occurrence; + DROP INDEX idx_condition_visit_id ON condition_occurrence; + + DROP INDEX idx_measurement_person_id ON measurement; + DROP INDEX idx_measurement_concept_id ON measurement; + DROP INDEX idx_measurement_visit_id ON measurement; + + DROP INDEX idx_note_person_id ON note; + DROP INDEX idx_note_concept_id ON note; + DROP INDEX idx_note_visit_id ON note; + + DROP INDEX idx_note_nlp_note_id ON note_nlp; + DROP INDEX idx_note_nlp_concept_id ON note_nlp; + + DROP INDEX idx_observation_person_id ON observation; + DROP INDEX idx_observation_concept_id ON observation; + DROP INDEX idx_observation_visit_id ON observation; + + DROP INDEX idx_fact_relationship_id_1 ON fact_relationship; + DROP INDEX idx_fact_relationship_id_2 ON fact_relationship; + DROP INDEX idx_fact_relationship_id_3 ON fact_relationship; + + + + /************************ + Standardized health system data + ************************/ + + + + + + /************************ + Standardized health economics + ************************/ + + DROP INDEX idx_period_person_id ON payer_plan_period; + + + + + + /************************ + Standardized derived elements + ************************/ + + + DROP INDEX idx_cohort_subject_id ON cohort; + DROP INDEX idx_cohort_c_definition_id ON cohort; + + DROP INDEX idx_ca_subject_id ON cohort_attribute; + DROP INDEX idx_ca_definition_id ON cohort_attribute; + + DROP INDEX idx_drug_era_person_id ON drug_era; + DROP INDEX idx_drug_era_concept_id ON drug_era; + + DROP INDEX idx_dose_era_person_id ON dose_era; + DROP INDEX idx_dose_era_concept_id ON dose_era; + + DROP INDEX idx_condition_era_person_id ON condition_era; + DROP INDEX idx_condition_era_concept_id ON condition_era; + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' remove_indexes_constraints is ending execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT +END diff --git a/sql/SPROC_test_move_data_to_permanent_tables.sql b/sql/SPROC_test_move_data_to_permanent_tables.sql new file mode 100644 index 0000000..35bd5d0 --- /dev/null +++ b/sql/SPROC_test_move_data_to_permanent_tables.sql @@ -0,0 +1,72 @@ +CREATE PROCEDURE test_move_data_to_permanent_tables +AS +BEGIN + -- Watermark table for SPROC + CREATE TABLE watermark_test (table_name VARCHAR(MAX)); + + -- Target table when moving data from staging + CREATE TABLE test_table + ( + col1 INTEGER NOT NULL, + col2 INTEGER NOT NULL , + col3 VARCHAR(20) NOT NULL, + ); + + CREATE TABLE expected_test_table + ( + col1 INTEGER NOT NULL, + col2 INTEGER NOT NULL , + col3 VARCHAR(20) NOT NULL, + ); + + -- Staging table for moving data to target table + SELECT TOP 0 * INTO dbo.staging_test_table FROM dbo.test_table; + + INSERT INTO staging_test_table VALUES(1, 2, 'test'); + INSERT INTO expected_test_table VALUES(1, 2, 'test'); + INSERT INTO watermark_test VALUES('test_table'); + + EXEC dbo.move_data_to_permanent_tables 'watermark_test'; + + + DECLARE @Expected AS VARCHAR(100) + DECLARE @Actual AS VARCHAR(100) + + SET @Expected = (SELECT COUNT(*) FROM expected_test_table) + SET @Actual = (SELECT COUNT(*) FROM test_table) + -- Validate test table has the same number of rows as expected table + IF (SELECT COUNT(*) FROM test_table) = (SELECT COUNT(*) FROM expected_test_table) + RAISERROR ('Expected and Actual Count is Equal', 0, 1) WITH NOWAIT; + ELSE + RAISERROR ('Actual Value(%s) is not Equal to expected value (%s) ', 0, 1, @Actual, @Expected) WITH NOWAIT; + + -- Validate test table has the same value for col1 as expected table + SET @Expected = (SELECT col1 FROM expected_test_table) + SET @Actual = (SELECT col1 FROM test_table) + IF (SELECT col1 FROM test_table) = (SELECT col1 FROM expected_test_table) + RAISERROR ('Actual Col 1 is Equal to Expected Col 1', 0, 1) WITH NOWAIT; + ELSE + RAISERROR ('Actual Value(%s) is not Equal to expected value (%s) ', 0, 1, @Actual, @Expected) WITH NOWAIT; + + + -- Validate test table has the same value for col2 as expected table + SET @Expected = (SELECT col2 FROM expected_test_table) + SET @Actual = (SELECT col2 FROM test_table) + IF (SELECT col2 FROM test_table) = (SELECT col2 FROM expected_test_table) + RAISERROR ('Actual Col 2 is Equal to Expected Col 2', 0, 1) WITH NOWAIT; + ELSE + RAISERROR ('Actual Value(%s) is not Equal to expected value (%s) ', 0, 1, @Actual, @Expected) WITH NOWAIT; + + -- Validate test table has the same value for col3 as expected table + SET @Expected = (SELECT col3 FROM expected_test_table) + SET @Actual = (SELECT col3 FROM test_table) + IF (SELECT col3 FROM test_table) = (SELECT col3 FROM expected_test_table) + RAISERROR ('Actual Col 3 is Equal to Expected Col 3', 0, 1) WITH NOWAIT; + ELSE + RAISERROR ('Actual Value(%s) is not Equal to expected value (%s) ', 0, 1, @Actual, @Expected) WITH NOWAIT; + + DROP TABLE watermark_test; + DROP TABLE test_table; + DROP TABLE staging_test_table; + DROP TABLE expected_test_table; +END \ No newline at end of file diff --git a/sql/dacpac/dbo/StoredProcedures/add_indexes_constraints.sql b/sql/dacpac/dbo/StoredProcedures/add_indexes_constraints.sql new file mode 100644 index 0000000..f6d038f --- /dev/null +++ b/sql/dacpac/dbo/StoredProcedures/add_indexes_constraints.sql @@ -0,0 +1,740 @@ +CREATE PROCEDURE add_indexes_constraints +AS +BEGIN + DECLARE @log_date AS NVARCHAR(50); + DECLARE @log_message NVARCHAR(512); + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' add_indexes_constraints is starting execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + -- add indices and primary keys + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ### + # # ## ## # # # # # # # # ## ## # # # # # # # # ##### ###### # # ###### #### + # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # ##### ## ##### #### + # # # # # # # # # # # # # # # ### # # # # # # # # ## # # + # # # # # # # # # # # # # # # # # ### # # # # ## # # # # # # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ### # # ##### ###### # # ###### #### + sql server script to create the required indexes within OMOP common data model, version 5.3 + last revised: 14-November-2017 + author: Patrick Ryan, Clair Blacketer + description: These primary keys and indices are considered a minimal requirement to ensure adequate performance of analyses. + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Primary key constraints + ************************* + ************************* + ************************* + ************************/ + + + + /************************ + Standardized vocabulary + ************************/ + + + + ALTER TABLE concept ADD CONSTRAINT xpk_concept PRIMARY KEY NONCLUSTERED (concept_id); + + ALTER TABLE vocabulary ADD CONSTRAINT xpk_vocabulary PRIMARY KEY NONCLUSTERED (vocabulary_id); + + ALTER TABLE domain ADD CONSTRAINT xpk_domain PRIMARY KEY NONCLUSTERED (domain_id); + + ALTER TABLE concept_class ADD CONSTRAINT xpk_concept_class PRIMARY KEY NONCLUSTERED (concept_class_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT xpk_concept_relationship PRIMARY KEY NONCLUSTERED (concept_id_1,concept_id_2,relationship_id); + + ALTER TABLE relationship ADD CONSTRAINT xpk_relationship PRIMARY KEY NONCLUSTERED (relationship_id); + + ALTER TABLE concept_ancestor ADD CONSTRAINT xpk_concept_ancestor PRIMARY KEY NONCLUSTERED (ancestor_concept_id,descendant_concept_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT xpk_source_to_concept_map PRIMARY KEY NONCLUSTERED (source_vocabulary_id,target_concept_id,source_code,valid_end_date); + + ALTER TABLE drug_strength ADD CONSTRAINT xpk_drug_strength PRIMARY KEY NONCLUSTERED (drug_concept_id, ingredient_concept_id); + + ALTER TABLE cohort_definition ADD CONSTRAINT xpk_cohort_definition PRIMARY KEY NONCLUSTERED (cohort_definition_id); + + ALTER TABLE attribute_definition ADD CONSTRAINT xpk_attribute_definition PRIMARY KEY NONCLUSTERED (attribute_definition_id); + + + /************************** + Standardized meta-data + ***************************/ + + + + /************************ + Standardized clinical data + ************************/ + + + /**PRIMARY KEY NONCLUSTERED constraints**/ + + ALTER TABLE person ADD CONSTRAINT xpk_person PRIMARY KEY NONCLUSTERED ( person_id ) ; + + ALTER TABLE observation_period ADD CONSTRAINT xpk_observation_period PRIMARY KEY NONCLUSTERED ( observation_period_id ) ; + + ALTER TABLE specimen ADD CONSTRAINT xpk_specimen PRIMARY KEY NONCLUSTERED ( specimen_id ) ; + + ALTER TABLE death ADD CONSTRAINT xpk_death PRIMARY KEY NONCLUSTERED ( person_id ) ; + + ALTER TABLE visit_occurrence ADD CONSTRAINT xpk_visit_occurrence PRIMARY KEY NONCLUSTERED ( visit_occurrence_id ) ; + + ALTER TABLE visit_detail ADD CONSTRAINT xpk_visit_detail PRIMARY KEY NONCLUSTERED ( visit_detail_id ) ; + + ALTER TABLE procedure_occurrence ADD CONSTRAINT xpk_procedure_occurrence PRIMARY KEY NONCLUSTERED ( procedure_occurrence_id ) ; + + ALTER TABLE drug_exposure ADD CONSTRAINT xpk_drug_exposure PRIMARY KEY NONCLUSTERED ( drug_exposure_id ) ; + + ALTER TABLE device_exposure ADD CONSTRAINT xpk_device_exposure PRIMARY KEY NONCLUSTERED ( device_exposure_id ) ; + + ALTER TABLE condition_occurrence ADD CONSTRAINT xpk_condition_occurrence PRIMARY KEY NONCLUSTERED ( condition_occurrence_id ) ; + + ALTER TABLE measurement ADD CONSTRAINT xpk_measurement PRIMARY KEY NONCLUSTERED ( measurement_id ) ; + + ALTER TABLE note ADD CONSTRAINT xpk_note PRIMARY KEY NONCLUSTERED ( note_id ) ; + + ALTER TABLE note_nlp ADD CONSTRAINT xpk_note_nlp PRIMARY KEY NONCLUSTERED ( note_nlp_id ) ; + + ALTER TABLE observation ADD CONSTRAINT xpk_observation PRIMARY KEY NONCLUSTERED ( observation_id ) ; + + + + + /************************ + Standardized health system data + ************************/ + + + ALTER TABLE location ADD CONSTRAINT xpk_location PRIMARY KEY NONCLUSTERED ( location_id ) ; + + ALTER TABLE care_site ADD CONSTRAINT xpk_care_site PRIMARY KEY NONCLUSTERED ( care_site_id ) ; + + ALTER TABLE provider ADD CONSTRAINT xpk_provider PRIMARY KEY NONCLUSTERED ( provider_id ) ; + + + + /************************ + Standardized health economics + ************************/ + + + ALTER TABLE payer_plan_period ADD CONSTRAINT xpk_payer_plan_period PRIMARY KEY NONCLUSTERED ( payer_plan_period_id ) ; + + ALTER TABLE cost ADD CONSTRAINT xpk_visit_cost PRIMARY KEY NONCLUSTERED ( cost_id ) ; + + + /************************ + Standardized derived elements + ************************/ + + ALTER TABLE cohort ADD CONSTRAINT xpk_cohort PRIMARY KEY NONCLUSTERED ( cohort_definition_id, subject_id, cohort_start_date, cohort_end_date ) ; + + ALTER TABLE cohort_attribute ADD CONSTRAINT xpk_cohort_attribute PRIMARY KEY NONCLUSTERED ( cohort_definition_id, subject_id, cohort_start_date, cohort_end_date, attribute_definition_id ) ; + + ALTER TABLE drug_era ADD CONSTRAINT xpk_drug_era PRIMARY KEY NONCLUSTERED ( drug_era_id ) ; + + ALTER TABLE dose_era ADD CONSTRAINT xpk_dose_era PRIMARY KEY NONCLUSTERED ( dose_era_id ) ; + + ALTER TABLE condition_era ADD CONSTRAINT xpk_condition_era PRIMARY KEY NONCLUSTERED ( condition_era_id ) ; + + + /************************ + ************************* + ************************* + ************************* + Indices + ************************* + ************************* + ************************* + ************************/ + + /************************ + Standardized vocabulary + ************************/ + + CREATE UNIQUE CLUSTERED INDEX idx_concept_concept_id ON concept (concept_id ASC); + CREATE INDEX idx_concept_code ON concept (concept_code ASC); + CREATE INDEX idx_concept_vocabluary_id ON concept (vocabulary_id ASC); + CREATE INDEX idx_concept_domain_id ON concept (domain_id ASC); + CREATE INDEX idx_concept_class_id ON concept (concept_class_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_vocabulary_vocabulary_id ON vocabulary (vocabulary_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_domain_domain_id ON domain (domain_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_concept_class_class_id ON concept_class (concept_class_id ASC); + + CREATE INDEX idx_concept_relationship_id_1 ON concept_relationship (concept_id_1 ASC); + CREATE INDEX idx_concept_relationship_id_2 ON concept_relationship (concept_id_2 ASC); + CREATE INDEX idx_concept_relationship_id_3 ON concept_relationship (relationship_id ASC); + + CREATE UNIQUE CLUSTERED INDEX idx_relationship_rel_id ON relationship (relationship_id ASC); + + CREATE CLUSTERED INDEX idx_concept_synonym_id ON concept_synonym (concept_id ASC); + + CREATE CLUSTERED INDEX idx_concept_ancestor_id_1 ON concept_ancestor (ancestor_concept_id ASC); + CREATE INDEX idx_concept_ancestor_id_2 ON concept_ancestor (descendant_concept_id ASC); + + CREATE CLUSTERED INDEX idx_source_to_concept_map_id_3 ON source_to_concept_map (target_concept_id ASC); + CREATE INDEX idx_source_to_concept_map_id_1 ON source_to_concept_map (source_vocabulary_id ASC); + CREATE INDEX idx_source_to_concept_map_id_2 ON source_to_concept_map (target_vocabulary_id ASC); + CREATE INDEX idx_source_to_concept_map_code ON source_to_concept_map (source_code ASC); + + CREATE CLUSTERED INDEX idx_drug_strength_id_1 ON drug_strength (drug_concept_id ASC); + CREATE INDEX idx_drug_strength_id_2 ON drug_strength (ingredient_concept_id ASC); + + CREATE CLUSTERED INDEX idx_cohort_definition_id ON cohort_definition (cohort_definition_id ASC); + + CREATE CLUSTERED INDEX idx_attribute_definition_id ON attribute_definition (attribute_definition_id ASC); + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + CREATE UNIQUE CLUSTERED INDEX idx_person_id ON person (person_id ASC); + + CREATE CLUSTERED INDEX idx_observation_period_id ON observation_period (person_id ASC); + + CREATE CLUSTERED INDEX idx_specimen_person_id ON specimen (person_id ASC); + CREATE INDEX idx_specimen_concept_id ON specimen (specimen_concept_id ASC); + + CREATE CLUSTERED INDEX idx_death_person_id ON death (person_id ASC); + + CREATE CLUSTERED INDEX idx_visit_person_id ON visit_occurrence (person_id ASC); + CREATE INDEX idx_visit_concept_id ON visit_occurrence (visit_concept_id ASC); + + CREATE CLUSTERED INDEX idx_visit_detail_person_id ON visit_detail (person_id ASC); + CREATE INDEX idx_visit_detail_concept_id ON visit_detail (visit_detail_concept_id ASC); + + CREATE CLUSTERED INDEX idx_procedure_person_id ON procedure_occurrence (person_id ASC); + CREATE INDEX idx_procedure_concept_id ON procedure_occurrence (procedure_concept_id ASC); + CREATE INDEX idx_procedure_visit_id ON procedure_occurrence (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_drug_person_id ON drug_exposure (person_id ASC); + CREATE INDEX idx_drug_concept_id ON drug_exposure (drug_concept_id ASC); + CREATE INDEX idx_drug_visit_id ON drug_exposure (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_device_person_id ON device_exposure (person_id ASC); + CREATE INDEX idx_device_concept_id ON device_exposure (device_concept_id ASC); + CREATE INDEX idx_device_visit_id ON device_exposure (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_condition_person_id ON condition_occurrence (person_id ASC); + CREATE INDEX idx_condition_concept_id ON condition_occurrence (condition_concept_id ASC); + CREATE INDEX idx_condition_visit_id ON condition_occurrence (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_measurement_person_id ON measurement (person_id ASC); + CREATE INDEX idx_measurement_concept_id ON measurement (measurement_concept_id ASC); + CREATE INDEX idx_measurement_visit_id ON measurement (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_note_person_id ON note (person_id ASC); + CREATE INDEX idx_note_concept_id ON note (note_type_concept_id ASC); + CREATE INDEX idx_note_visit_id ON note (visit_occurrence_id ASC); + + CREATE CLUSTERED INDEX idx_note_nlp_note_id ON note_nlp (note_id ASC); + CREATE INDEX idx_note_nlp_concept_id ON note_nlp (note_nlp_concept_id ASC); + + CREATE CLUSTERED INDEX idx_observation_person_id ON observation (person_id ASC); + CREATE INDEX idx_observation_concept_id ON observation (observation_concept_id ASC); + CREATE INDEX idx_observation_visit_id ON observation (visit_occurrence_id ASC); + + CREATE INDEX idx_fact_relationship_id_1 ON fact_relationship (domain_concept_id_1 ASC); + CREATE INDEX idx_fact_relationship_id_2 ON fact_relationship (domain_concept_id_2 ASC); + CREATE INDEX idx_fact_relationship_id_3 ON fact_relationship (relationship_concept_id ASC); + + + + /************************ + Standardized health system data + ************************/ + + + + + + /************************ + Standardized health economics + ************************/ + + CREATE CLUSTERED INDEX idx_period_person_id ON payer_plan_period (person_id ASC); + + + + + + /************************ + Standardized derived elements + ************************/ + + + CREATE INDEX idx_cohort_subject_id ON cohort (subject_id ASC); + CREATE INDEX idx_cohort_c_definition_id ON cohort (cohort_definition_id ASC); + + CREATE INDEX idx_ca_subject_id ON cohort_attribute (subject_id ASC); + CREATE INDEX idx_ca_definition_id ON cohort_attribute (cohort_definition_id ASC); + + CREATE CLUSTERED INDEX idx_drug_era_person_id ON drug_era (person_id ASC); + CREATE INDEX idx_drug_era_concept_id ON drug_era (drug_concept_id ASC); + + CREATE CLUSTERED INDEX idx_dose_era_person_id ON dose_era (person_id ASC); + CREATE INDEX idx_dose_era_concept_id ON dose_era (drug_concept_id ASC); + + CREATE CLUSTERED INDEX idx_condition_era_person_id ON condition_era (person_id ASC); + CREATE INDEX idx_condition_era_concept_id ON condition_era (condition_concept_id ASC); + + -- add foreign key constraints + + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ##### + # # ## ## # # # # # # # # ## ## # # # # # # # #### # # #### ##### ##### ## # # # ##### #### + # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # ## # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # #### # # # # # # # # # # #### + # # # # # # # # # # # # # # # ### # # # # # # # # # ##### ###### # # # # # # + # # # # # # # # # # # # # # # # # ### # # # # # # # ## # # # # # # # # # ## # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ##### #### # # #### # # # # # # # # # #### + sql server script to create foreign key constraints within OMOP common data model, version 5.3.0 + last revised: 14-June-2018 + author: Patrick Ryan, Clair Blacketer + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Foreign key constraints + ************************* + ************************* + ************************* + ************************/ + + + /************************ + Standardized vocabulary + ************************/ + + + ALTER TABLE concept ADD CONSTRAINT fpk_concept_domain FOREIGN KEY (domain_id) REFERENCES domain (domain_id); + + ALTER TABLE concept ADD CONSTRAINT fpk_concept_class FOREIGN KEY (concept_class_id) REFERENCES concept_class (concept_class_id); + + ALTER TABLE concept ADD CONSTRAINT fpk_concept_vocabulary FOREIGN KEY (vocabulary_id) REFERENCES vocabulary (vocabulary_id); + + ALTER TABLE vocabulary ADD CONSTRAINT fpk_vocabulary_concept FOREIGN KEY (vocabulary_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE domain ADD CONSTRAINT fpk_domain_concept FOREIGN KEY (domain_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_class ADD CONSTRAINT fpk_concept_class_concept FOREIGN KEY (concept_class_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT fpk_concept_relationship_c_1 FOREIGN KEY (concept_id_1) REFERENCES concept (concept_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT fpk_concept_relationship_c_2 FOREIGN KEY (concept_id_2) REFERENCES concept (concept_id); + + ALTER TABLE concept_relationship ADD CONSTRAINT fpk_concept_relationship_id FOREIGN KEY (relationship_id) REFERENCES relationship (relationship_id); + + ALTER TABLE relationship ADD CONSTRAINT fpk_relationship_concept FOREIGN KEY (relationship_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE relationship ADD CONSTRAINT fpk_relationship_reverse FOREIGN KEY (reverse_relationship_id) REFERENCES relationship (relationship_id); + + ALTER TABLE concept_synonym ADD CONSTRAINT fpk_concept_synonym_concept FOREIGN KEY (concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_synonym ADD CONSTRAINT fpk_concept_synonym_language FOREIGN KEY (language_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_ancestor ADD CONSTRAINT fpk_concept_ancestor_concept_1 FOREIGN KEY (ancestor_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE concept_ancestor ADD CONSTRAINT fpk_concept_ancestor_concept_2 FOREIGN KEY (descendant_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_to_concept_map_v_1 FOREIGN KEY (source_vocabulary_id) REFERENCES vocabulary (vocabulary_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_concept_id FOREIGN KEY (source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_to_concept_map_v_2 FOREIGN KEY (target_vocabulary_id) REFERENCES vocabulary (vocabulary_id); + + ALTER TABLE source_to_concept_map ADD CONSTRAINT fpk_source_to_concept_map_c_1 FOREIGN KEY (target_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_concept_1 FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_concept_2 FOREIGN KEY (ingredient_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_unit_1 FOREIGN KEY (amount_unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_unit_2 FOREIGN KEY (numerator_unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_strength ADD CONSTRAINT fpk_drug_strength_unit_3 FOREIGN KEY (denominator_unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE cohort_definition ADD CONSTRAINT fpk_cohort_definition_concept FOREIGN KEY (definition_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE cohort_definition ADD CONSTRAINT fpk_cohort_subject_concept FOREIGN KEY (subject_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE attribute_definition ADD CONSTRAINT fpk_attribute_type_concept FOREIGN KEY (attribute_type_concept_id) REFERENCES concept (concept_id); + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + + + ALTER TABLE person ADD CONSTRAINT fpk_person_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_ethnicity_concept FOREIGN KEY (ethnicity_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_ethnicity_concept_s FOREIGN KEY (ethnicity_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_gender_concept FOREIGN KEY (gender_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_gender_concept_s FOREIGN KEY (gender_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_location FOREIGN KEY (location_id) REFERENCES location (location_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_race_concept FOREIGN KEY (race_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE person ADD CONSTRAINT fpk_person_race_concept_s FOREIGN KEY (race_source_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE observation_period ADD CONSTRAINT fpk_observation_period_concept FOREIGN KEY (period_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation_period ADD CONSTRAINT fpk_observation_period_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_concept FOREIGN KEY (specimen_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_type_concept FOREIGN KEY (specimen_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_unit_concept FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_site_concept FOREIGN KEY (anatomic_site_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE specimen ADD CONSTRAINT fpk_specimen_status_concept FOREIGN KEY (disease_status_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE death ADD CONSTRAINT fpk_death_cause_concept FOREIGN KEY (cause_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE death ADD CONSTRAINT fpk_death_cause_concept_s FOREIGN KEY (cause_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE death ADD CONSTRAINT fpk_death_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE death ADD CONSTRAINT fpk_death_type_concept FOREIGN KEY (death_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_type_concept FOREIGN KEY (visit_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_concept_s FOREIGN KEY (visit_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_admitting_s FOREIGN KEY (admitting_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_discharge FOREIGN KEY (discharge_to_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_occurrence ADD CONSTRAINT fpk_visit_preceding FOREIGN KEY (preceding_visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + ALTER TABLE visit_detail ADD CONSTRAINT fpd_v_detail_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_admitting_s FOREIGN KEY (admitting_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_concept_s FOREIGN KEY (visit_detail_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_discharge FOREIGN KEY (discharge_to_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_parent FOREIGN KEY (visit_detail_parent_id) REFERENCES visit_detail (visit_detail_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_preceding FOREIGN KEY (preceding_visit_detail_id) REFERENCES visit_detail (visit_detail_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE visit_detail ADD CONSTRAINT fpk_v_detail_type_concept FOREIGN KEY (visit_detail_type_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_concept FOREIGN KEY (procedure_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_concept_s FOREIGN KEY (procedure_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_modifier FOREIGN KEY (modifier_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_type_concept FOREIGN KEY (procedure_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE procedure_occurrence ADD CONSTRAINT fpk_procedure_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_concept FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_concept_s FOREIGN KEY (drug_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_route_concept FOREIGN KEY (route_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_type_concept FOREIGN KEY (drug_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_exposure ADD CONSTRAINT fpk_drug_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_concept FOREIGN KEY (device_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_concept_s FOREIGN KEY (device_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_type_concept FOREIGN KEY (device_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE device_exposure ADD CONSTRAINT fpk_device_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_concept FOREIGN KEY (condition_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_type_concept FOREIGN KEY (condition_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_concept_s FOREIGN KEY (condition_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE condition_occurrence ADD CONSTRAINT fpk_condition_status_concept FOREIGN KEY (condition_status_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_concept FOREIGN KEY (measurement_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_concept_s FOREIGN KEY (measurement_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_operator FOREIGN KEY (operator_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_type_concept FOREIGN KEY (measurement_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_unit FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_value FOREIGN KEY (value_as_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE measurement ADD CONSTRAINT fpk_measurement_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + + ALTER TABLE note ADD CONSTRAINT fpk_note_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_type_concept FOREIGN KEY (note_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_class_concept FOREIGN KEY (note_class_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_encoding_concept FOREIGN KEY (encoding_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_language_concept FOREIGN KEY (language_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE note ADD CONSTRAINT fpk_note_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + ALTER TABLE note_nlp ADD CONSTRAINT fpk_note_nlp_note FOREIGN KEY (note_id) REFERENCES note (note_id); + + ALTER TABLE note_nlp ADD CONSTRAINT fpk_note_nlp_section_concept FOREIGN KEY (section_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE note_nlp ADD CONSTRAINT fpk_note_nlp_concept FOREIGN KEY (note_nlp_concept_id) REFERENCES concept (concept_id); + + + + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_concept FOREIGN KEY (observation_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_concept_s FOREIGN KEY (observation_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_provider FOREIGN KEY (provider_id) REFERENCES provider (provider_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_qualifier FOREIGN KEY (qualifier_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_type_concept FOREIGN KEY (observation_type_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_unit FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_value FOREIGN KEY (value_as_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE observation ADD CONSTRAINT fpk_observation_visit FOREIGN KEY (visit_occurrence_id) REFERENCES visit_occurrence (visit_occurrence_id); + + + + ALTER TABLE fact_relationship ADD CONSTRAINT fpk_fact_domain_1 FOREIGN KEY (domain_concept_id_1) REFERENCES concept (concept_id); + + ALTER TABLE fact_relationship ADD CONSTRAINT fpk_fact_domain_2 FOREIGN KEY (domain_concept_id_2) REFERENCES concept (concept_id); + + ALTER TABLE fact_relationship ADD CONSTRAINT fpk_fact_relationship FOREIGN KEY (relationship_concept_id) REFERENCES concept (concept_id); + + + + /************************ + Standardized health system data + ************************/ + + ALTER TABLE care_site ADD CONSTRAINT fpk_care_site_location FOREIGN KEY (location_id) REFERENCES location (location_id); + + ALTER TABLE care_site ADD CONSTRAINT fpk_care_site_place FOREIGN KEY (place_of_service_concept_id) REFERENCES concept (concept_id); + + + + ALTER TABLE provider ADD CONSTRAINT fpk_provider_care_site FOREIGN KEY (care_site_id) REFERENCES care_site (care_site_id); + + ALTER TABLE provider ADD CONSTRAINT fpk_provider_gender FOREIGN KEY (gender_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE provider ADD CONSTRAINT fpk_provider_gender_s FOREIGN KEY (gender_source_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE provider ADD CONSTRAINT fpk_provider_specialty FOREIGN KEY (specialty_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE provider ADD CONSTRAINT fpk_provider_specialty_s FOREIGN KEY (specialty_source_concept_id) REFERENCES concept (concept_id); + + + + + + /************************ + Standardized health economics + ************************/ + + ALTER TABLE payer_plan_period ADD CONSTRAINT fpk_payer_plan_period FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE cost ADD CONSTRAINT fpk_visit_cost_currency FOREIGN KEY (currency_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE cost ADD CONSTRAINT fpk_visit_cost_period FOREIGN KEY (payer_plan_period_id) REFERENCES payer_plan_period (payer_plan_period_id); + + ALTER TABLE cost ADD CONSTRAINT fpk_drg_concept FOREIGN KEY (drg_concept_id) REFERENCES concept (concept_id); + + /************************ + Standardized derived elements + ************************/ + + + ALTER TABLE cohort_attribute ADD CONSTRAINT fpk_ca_cohort_definition FOREIGN KEY (cohort_definition_id) REFERENCES cohort_definition (cohort_definition_id); + + ALTER TABLE cohort_attribute ADD CONSTRAINT fpk_ca_attribute_definition FOREIGN KEY (attribute_definition_id) REFERENCES attribute_definition (attribute_definition_id); + + ALTER TABLE cohort_attribute ADD CONSTRAINT fpk_ca_value FOREIGN KEY (value_as_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_era ADD CONSTRAINT fpk_drug_era_concept FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE drug_era ADD CONSTRAINT fpk_drug_era_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + + + ALTER TABLE dose_era ADD CONSTRAINT fpk_dose_era_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE dose_era ADD CONSTRAINT fpk_dose_era_concept FOREIGN KEY (drug_concept_id) REFERENCES concept (concept_id); + + ALTER TABLE dose_era ADD CONSTRAINT fpk_dose_era_unit_concept FOREIGN KEY (unit_concept_id) REFERENCES concept (concept_id); + + + ALTER TABLE condition_era ADD CONSTRAINT fpk_condition_era_person FOREIGN KEY (person_id) REFERENCES person (person_id); + + ALTER TABLE condition_era ADD CONSTRAINT fpk_condition_era_concept FOREIGN KEY (condition_concept_id) REFERENCES concept (concept_id); + + + /************************ + ************************* + ************************* + ************************* + Unique constraints + ************************* + ************************* + ************************* + ************************/ + + -- Taken out in 5.3.2 release https://github.com/OHDSI/CommonDataModel/releases/tag/v5.3.2 + -- ALTER TABLE concept_synonym ADD CONSTRAINT uq_concept_synonym UNIQUE (concept_id, concept_synonym_name, language_concept_id); + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' add_indexes_constraints is ending execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT +END + +GO + diff --git a/sql/dacpac/dbo/StoredProcedures/move_data_to_permanent_tables.sql b/sql/dacpac/dbo/StoredProcedures/move_data_to_permanent_tables.sql new file mode 100644 index 0000000..34320a4 --- /dev/null +++ b/sql/dacpac/dbo/StoredProcedures/move_data_to_permanent_tables.sql @@ -0,0 +1,111 @@ +CREATE PROCEDURE move_data_to_permanent_tables @watermark_table NVARCHAR(100) +AS + -- SET XACT_ABORT ON will cause the transaction to be uncommittable + -- when the constraint violation occurs. + SET XACT_ABORT ON; + BEGIN TRANSACTION move_data_to_permanent_tables + BEGIN TRY + DECLARE @current_table_name VARCHAR(MAX); + DECLARE @staging_table_name VARCHAR(MAX); + DECLARE @log_date AS NVARCHAR(50); + DECLARE @log_message NVARCHAR(512); + SET @current_table_name = '' + + -- The use of RAISERROR with the NOWAIT option shouldn't actually be emitting an exception as you might expect. It's used + -- to immediately emmit log/console messages. For additional details, see + -- https://www.mssqltips.com/sqlservertip/1660/using-the-nowait-option-with-the-sql-server-raiserror-statement/ + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is starting execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is removing all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + EXEC dbo.remove_indexes_constraints; + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables removed all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + DECLARE @cursor_sql VARCHAR(MAX) + SET @cursor_sql = 'DECLARE omop_tables_cursor CURSOR FOR SELECT table_name FROM ' + @watermark_table + EXEC(@cursor_sql) + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is moving data for tables in ' + @watermark_table + RAISERROR (@log_message, 0, 1) WITH NOWAIT + -- https://www.mssqltips.com/sqlservertip/1599/cursor-in-sql-server/ + OPEN omop_tables_cursor + FETCH NEXT FROM omop_tables_cursor INTO @current_table_name + + WHILE @@FETCH_STATUS = 0 + + BEGIN + DECLARE @truncate_sql VARCHAR(MAX) + DECLARE @switch_sql VARCHAR(MAX) + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is truncating table ' + @current_table_name + RAISERROR (@log_message, 0, 1) WITH NOWAIT + SET @truncate_sql = 'TRUNCATE TABLE ' + @current_table_name + SET @staging_table_name = 'staging_' + @current_table_name + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is moving data from staging to ' + @current_table_name + RAISERROR (@log_message, 0, 1) WITH NOWAIT + SET @switch_sql = 'ALTER TABLE ' + @staging_table_name + ' SWITCH TO ' + @current_table_name + EXEC (@truncate_sql) + EXEC (@switch_sql) + FETCH NEXT FROM omop_tables_cursor INTO @current_table_name; + END + CLOSE omop_tables_cursor; + DEALLOCATE omop_tables_cursor; + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables moved all data from staging for tables in ' + @watermark_table + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is applying all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + EXEC dbo.add_indexes_constraints; + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables applied all indexes and constraints on OMOP tables' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + COMMIT TRANSACTION move_data_to_permanent_tables; + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is ending execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + RETURN 1; + END TRY + BEGIN CATCH + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables entered catch block' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + + IF (SELECT CURSOR_STATUS('global','omop_tables_cursor')) >= -1 + BEGIN + DEALLOCATE omop_tables_cursor; + END + + -- Transaction uncommittable + IF (XACT_STATE()) = -1 + BEGIN + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is rolling back transaction' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + ROLLBACK TRANSACTION move_data_to_permanent_tables; + THROW; + END + -- Transaction committable + IF (XACT_STATE()) = 1 + BEGIN + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' move_data_to_permanent_tables is committing transaction' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + COMMIT TRANSACTION move_data_to_permanent_tables; + END + + END CATCH; + +GO diff --git a/sql/dacpac/dbo/StoredProcedures/remove_indexes_constraints.sql b/sql/dacpac/dbo/StoredProcedures/remove_indexes_constraints.sql new file mode 100644 index 0000000..9c83f13 --- /dev/null +++ b/sql/dacpac/dbo/StoredProcedures/remove_indexes_constraints.sql @@ -0,0 +1,737 @@ +CREATE PROCEDURE remove_indexes_constraints +AS +BEGIN + DECLARE @log_date AS NVARCHAR(50); + DECLARE @log_message NVARCHAR(512); + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' remove_indexes_constraints is starting execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT + -- add foreign key constraints + + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ##### + # # ## ## # # # # # # # # ## ## # # # # # # # #### # # #### ##### ##### ## # # # ##### #### + # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # ## # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # #### # # # # # # # # # # #### + # # # # # # # # # # # # # # # ### # # # # # # # # # ##### ###### # # # # # # + # # # # # # # # # # # # # # # # # ### # # # # # # # ## # # # # # # # # # ## # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ##### #### # # #### # # # # # # # # # #### + sql server script to create foreign key constraints within OMOP common data model, version 5.3.0 + last revised: 14-June-2018 + author: Patrick Ryan, Clair Blacketer + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Foreign key constraints + ************************* + ************************* + ************************* + ************************/ + + + /************************ + Standardized vocabulary + ************************/ + + + ALTER TABLE concept DROP CONSTRAINT fpk_concept_domain; + + ALTER TABLE concept DROP CONSTRAINT fpk_concept_class; + + ALTER TABLE concept DROP CONSTRAINT fpk_concept_vocabulary; + + ALTER TABLE vocabulary DROP CONSTRAINT fpk_vocabulary_concept; + + ALTER TABLE domain DROP CONSTRAINT fpk_domain_concept; + + ALTER TABLE concept_class DROP CONSTRAINT fpk_concept_class_concept; + + ALTER TABLE concept_relationship DROP CONSTRAINT fpk_concept_relationship_c_1; + + ALTER TABLE concept_relationship DROP CONSTRAINT fpk_concept_relationship_c_2; + + ALTER TABLE concept_relationship DROP CONSTRAINT fpk_concept_relationship_id; + + ALTER TABLE relationship DROP CONSTRAINT fpk_relationship_concept; + + ALTER TABLE relationship DROP CONSTRAINT fpk_relationship_reverse; + + ALTER TABLE concept_synonym DROP CONSTRAINT fpk_concept_synonym_concept; + + ALTER TABLE concept_synonym DROP CONSTRAINT fpk_concept_synonym_language; + + ALTER TABLE concept_ancestor DROP CONSTRAINT fpk_concept_ancestor_concept_1; + + ALTER TABLE concept_ancestor DROP CONSTRAINT fpk_concept_ancestor_concept_2; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_to_concept_map_v_1; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_concept_id; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_to_concept_map_v_2; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT fpk_source_to_concept_map_c_1; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_concept_1; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_concept_2; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_unit_1; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_unit_2; + + ALTER TABLE drug_strength DROP CONSTRAINT fpk_drug_strength_unit_3; + + ALTER TABLE cohort_definition DROP CONSTRAINT fpk_cohort_definition_concept; + + ALTER TABLE cohort_definition DROP CONSTRAINT fpk_cohort_subject_concept; + + ALTER TABLE attribute_definition DROP CONSTRAINT fpk_attribute_type_concept; + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + ALTER TABLE person DROP CONSTRAINT fpk_person_care_site; + + ALTER TABLE person DROP CONSTRAINT fpk_person_ethnicity_concept; + + ALTER TABLE person DROP CONSTRAINT fpk_person_ethnicity_concept_s; + + ALTER TABLE person DROP CONSTRAINT fpk_person_gender_concept; + + ALTER TABLE person DROP CONSTRAINT fpk_person_gender_concept_s; + + ALTER TABLE person DROP CONSTRAINT fpk_person_location; + + ALTER TABLE person DROP CONSTRAINT fpk_person_provider; + + ALTER TABLE person DROP CONSTRAINT fpk_person_race_concept; + + ALTER TABLE person DROP CONSTRAINT fpk_person_race_concept_s; + + + + + ALTER TABLE observation_period DROP CONSTRAINT fpk_observation_period_concept; + + ALTER TABLE observation_period DROP CONSTRAINT fpk_observation_period_person; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_person; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_type_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_unit_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_site_concept; + + ALTER TABLE specimen DROP CONSTRAINT fpk_specimen_status_concept; + + ALTER TABLE death DROP CONSTRAINT fpk_death_cause_concept; + + ALTER TABLE death DROP CONSTRAINT fpk_death_cause_concept_s; + + ALTER TABLE death DROP CONSTRAINT fpk_death_person; + + ALTER TABLE death DROP CONSTRAINT fpk_death_type_concept; + + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_admitting_s; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_care_site; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_concept_s; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_discharge; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_person; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_preceding; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_provider; + + ALTER TABLE visit_occurrence DROP CONSTRAINT fpk_visit_type_concept; + + + ALTER TABLE visit_detail DROP CONSTRAINT fpd_v_detail_visit; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_admitting_s; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_care_site; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_concept_s; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_discharge; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_parent; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_person; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_preceding; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_provider; + + ALTER TABLE visit_detail DROP CONSTRAINT fpk_v_detail_type_concept; + + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_concept; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_concept_s; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_modifier; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_person; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_provider; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_type_concept; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT fpk_procedure_visit; + + + + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_concept; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_concept_s; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_person; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_provider; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_route_concept; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_type_concept; + + ALTER TABLE drug_exposure DROP CONSTRAINT fpk_drug_visit; + + + + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_concept; + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_concept_s; + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_person; + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_provider; + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_type_concept; + + ALTER TABLE device_exposure DROP CONSTRAINT fpk_device_visit; + + + + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_person; + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_concept; + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_concept_s; + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_type_concept; + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_provider; + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_visit; + + + ALTER TABLE condition_occurrence DROP CONSTRAINT fpk_condition_status_concept; + + + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_concept; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_concept_s; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_operator; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_person; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_provider; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_type_concept; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_unit; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_value; + + ALTER TABLE measurement DROP CONSTRAINT fpk_measurement_visit; + + ALTER TABLE note DROP CONSTRAINT fpk_note_person; + + ALTER TABLE note DROP CONSTRAINT fpk_note_type_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_note_class_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_note_encoding_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_language_concept; + + ALTER TABLE note DROP CONSTRAINT fpk_note_provider; + + ALTER TABLE note DROP CONSTRAINT fpk_note_visit; + + + ALTER TABLE note_nlp DROP CONSTRAINT fpk_note_nlp_note; + + ALTER TABLE note_nlp DROP CONSTRAINT fpk_note_nlp_section_concept; + + ALTER TABLE note_nlp DROP CONSTRAINT fpk_note_nlp_concept; + + + + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_concept; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_concept_s; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_person; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_provider; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_qualifier; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_type_concept; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_unit; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_value; + + ALTER TABLE observation DROP CONSTRAINT fpk_observation_visit; + + + + ALTER TABLE fact_relationship DROP CONSTRAINT fpk_fact_domain_1; + + ALTER TABLE fact_relationship DROP CONSTRAINT fpk_fact_domain_2; + + ALTER TABLE fact_relationship DROP CONSTRAINT fpk_fact_relationship; + + + + /************************ + Standardized health system data + ************************/ + + ALTER TABLE care_site DROP CONSTRAINT fpk_care_site_location; + + ALTER TABLE care_site DROP CONSTRAINT fpk_care_site_place; + + + + ALTER TABLE provider DROP CONSTRAINT fpk_provider_care_site; + + ALTER TABLE provider DROP CONSTRAINT fpk_provider_gender; + + ALTER TABLE provider DROP CONSTRAINT fpk_provider_gender_s; + + ALTER TABLE provider DROP CONSTRAINT fpk_provider_specialty; + + ALTER TABLE provider DROP CONSTRAINT fpk_provider_specialty_s; + + + + + + /************************ + Standardized health economics + ************************/ + + ALTER TABLE payer_plan_period DROP CONSTRAINT fpk_payer_plan_period; + + ALTER TABLE cost DROP CONSTRAINT fpk_visit_cost_currency; + + ALTER TABLE cost DROP CONSTRAINT fpk_visit_cost_period; + + ALTER TABLE cost DROP CONSTRAINT fpk_drg_concept; + + /************************ + Standardized derived elements + ************************/ + + + ALTER TABLE cohort_attribute DROP CONSTRAINT fpk_ca_cohort_definition; + + ALTER TABLE cohort_attribute DROP CONSTRAINT fpk_ca_attribute_definition; + + ALTER TABLE cohort_attribute DROP CONSTRAINT fpk_ca_value; + + ALTER TABLE drug_era DROP CONSTRAINT fpk_drug_era_concept; + + ALTER TABLE drug_era DROP CONSTRAINT fpk_drug_era_person; + + + + ALTER TABLE dose_era DROP CONSTRAINT fpk_dose_era_person; + + ALTER TABLE dose_era DROP CONSTRAINT fpk_dose_era_concept; + + ALTER TABLE dose_era DROP CONSTRAINT fpk_dose_era_unit_concept; + + + ALTER TABLE condition_era DROP CONSTRAINT fpk_condition_era_person; + + ALTER TABLE condition_era DROP CONSTRAINT fpk_condition_era_concept; + + /************************ + ************************* + ************************* + ************************* + Unique constraints + ************************* + ************************* + ************************* + ************************/ + + -- Taken out in 5.3.2 release https://github.com/OHDSI/CommonDataModel/releases/tag/v5.3.2 + -- ALTER TABLE concept_synonym DROP CONSTRAINT uq_concept_synonym; + + -- add indices and primary keys + /********************************************************************************* + # Copyright 2014 Observational Health Data Sciences and Informatics + # + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + ********************************************************************************/ + + /************************ + ####### # # ####### ###### ##### ###### # # ####### ##### ### + # # ## ## # # # # # # # # ## ## # # # # # # # # ##### ###### # # ###### #### + # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # + # # # # # # # ###### # # # # # # # # ###### ##### # # # # # # ##### ## ##### #### + # # # # # # # # # # # # # # # ### # # # # # # # # ## # # + # # # # # # # # # # # # # # # # # ### # # # # ## # # # # # # # # + ####### # # ####### # ##### ###### # # ## ##### ### ##### ### # # ##### ###### # # ###### #### + sql server script to create the required indexes within OMOP common data model, version 5.3 + last revised: 14-November-2017 + author: Patrick Ryan, Clair Blacketer + description: These primary keys and indices are considered a minimal requirement to ensure adequate performance of analyses. + *************************/ + + + /************************ + ************************* + ************************* + ************************* + Primary key constraints + ************************* + ************************* + ************************* + ************************/ + + + + /************************ + Standardized vocabulary + ************************/ + + + + ALTER TABLE concept DROP CONSTRAINT xpk_concept; + + ALTER TABLE vocabulary DROP CONSTRAINT xpk_vocabulary; + + ALTER TABLE domain DROP CONSTRAINT xpk_domain; + + ALTER TABLE concept_class DROP CONSTRAINT xpk_concept_class; + + ALTER TABLE concept_relationship DROP CONSTRAINT xpk_concept_relationship; + + ALTER TABLE relationship DROP CONSTRAINT xpk_relationship; + + ALTER TABLE concept_ancestor DROP CONSTRAINT xpk_concept_ancestor; + + ALTER TABLE source_to_concept_map DROP CONSTRAINT xpk_source_to_concept_map; + + ALTER TABLE drug_strength DROP CONSTRAINT xpk_drug_strength; + + ALTER TABLE cohort_definition DROP CONSTRAINT xpk_cohort_definition; + + ALTER TABLE attribute_definition DROP CONSTRAINT xpk_attribute_definition; + + + /************************** + Standardized meta-data + ***************************/ + + + + /************************ + Standardized clinical data + ************************/ + + + /**PRIMARY KEY NONCLUSTERED constraints**/ + + ALTER TABLE person DROP CONSTRAINT xpk_person; + + ALTER TABLE observation_period DROP CONSTRAINT xpk_observation_period; + + ALTER TABLE specimen DROP CONSTRAINT xpk_specimen; + + ALTER TABLE death DROP CONSTRAINT xpk_death; + + ALTER TABLE visit_occurrence DROP CONSTRAINT xpk_visit_occurrence; + + ALTER TABLE visit_detail DROP CONSTRAINT xpk_visit_detail; + + ALTER TABLE procedure_occurrence DROP CONSTRAINT xpk_procedure_occurrence; + + ALTER TABLE drug_exposure DROP CONSTRAINT xpk_drug_exposure; + + ALTER TABLE device_exposure DROP CONSTRAINT xpk_device_exposure; + + ALTER TABLE condition_occurrence DROP CONSTRAINT xpk_condition_occurrence; + + ALTER TABLE measurement DROP CONSTRAINT xpk_measurement; + + ALTER TABLE note DROP CONSTRAINT xpk_note; + + ALTER TABLE note_nlp DROP CONSTRAINT xpk_note_nlp; + + ALTER TABLE observation DROP CONSTRAINT xpk_observation; + + + + + /************************ + Standardized health system data + ************************/ + + + ALTER TABLE location DROP CONSTRAINT xpk_location; + + ALTER TABLE care_site DROP CONSTRAINT xpk_care_site; + + ALTER TABLE provider DROP CONSTRAINT xpk_provider; + + + + /************************ + Standardized health economics + ************************/ + + + ALTER TABLE payer_plan_period DROP CONSTRAINT xpk_payer_plan_period; + + ALTER TABLE cost DROP CONSTRAINT xpk_visit_cost; + + + /************************ + Standardized derived elements + ************************/ + + ALTER TABLE cohort DROP CONSTRAINT xpk_cohort; + + ALTER TABLE cohort_attribute DROP CONSTRAINT xpk_cohort_attribute; + + ALTER TABLE drug_era DROP CONSTRAINT xpk_drug_era; + + ALTER TABLE dose_era DROP CONSTRAINT xpk_dose_era; + + ALTER TABLE condition_era DROP CONSTRAINT xpk_condition_era; + + + /************************ + ************************* + ************************* + ************************* + Indices + ************************* + ************************* + ************************* + ************************/ + + /************************ + Standardized vocabulary + ************************/ + + DROP INDEX idx_concept_concept_id ON concept; + DROP INDEX idx_concept_code ON concept; + DROP INDEX idx_concept_vocabluary_id ON concept; + DROP INDEX idx_concept_domain_id ON concept; + DROP INDEX idx_concept_class_id ON concept; + + DROP INDEX idx_vocabulary_vocabulary_id ON vocabulary; + + DROP INDEX idx_domain_domain_id ON domain; + + DROP INDEX idx_concept_class_class_id ON concept_class; + + DROP INDEX idx_concept_relationship_id_1 ON concept_relationship; + DROP INDEX idx_concept_relationship_id_2 ON concept_relationship; + DROP INDEX idx_concept_relationship_id_3 ON concept_relationship; + + DROP INDEX idx_relationship_rel_id ON relationship; + + DROP INDEX idx_concept_synonym_id ON concept_synonym; + + DROP INDEX idx_concept_ancestor_id_1 ON concept_ancestor; + DROP INDEX idx_concept_ancestor_id_2 ON concept_ancestor; + + DROP INDEX idx_source_to_concept_map_id_3 ON source_to_concept_map; + DROP INDEX idx_source_to_concept_map_id_1 ON source_to_concept_map; + DROP INDEX idx_source_to_concept_map_id_2 ON source_to_concept_map; + DROP INDEX idx_source_to_concept_map_code ON source_to_concept_map; + + DROP INDEX idx_drug_strength_id_1 ON drug_strength; + DROP INDEX idx_drug_strength_id_2 ON drug_strength; + + DROP INDEX idx_cohort_definition_id ON cohort_definition; + + DROP INDEX idx_attribute_definition_id ON attribute_definition; + + + /************************** + Standardized meta-data + ***************************/ + + + + + + /************************ + Standardized clinical data + ************************/ + + DROP INDEX idx_person_id ON person; + + DROP INDEX idx_observation_period_id ON observation_period; + + DROP INDEX idx_specimen_person_id ON specimen; + DROP INDEX idx_specimen_concept_id ON specimen; + + DROP INDEX idx_death_person_id ON death; + + DROP INDEX idx_visit_person_id ON visit_occurrence; + DROP INDEX idx_visit_concept_id ON visit_occurrence; + + DROP INDEX idx_visit_detail_person_id ON visit_detail; + DROP INDEX idx_visit_detail_concept_id ON visit_detail; + + DROP INDEX idx_procedure_person_id ON procedure_occurrence; + DROP INDEX idx_procedure_concept_id ON procedure_occurrence; + DROP INDEX idx_procedure_visit_id ON procedure_occurrence; + + DROP INDEX idx_drug_person_id ON drug_exposure; + DROP INDEX idx_drug_concept_id ON drug_exposure; + DROP INDEX idx_drug_visit_id ON drug_exposure; + + DROP INDEX idx_device_person_id ON device_exposure; + DROP INDEX idx_device_concept_id ON device_exposure; + DROP INDEX idx_device_visit_id ON device_exposure; + + DROP INDEX idx_condition_person_id ON condition_occurrence; + DROP INDEX idx_condition_concept_id ON condition_occurrence; + DROP INDEX idx_condition_visit_id ON condition_occurrence; + + DROP INDEX idx_measurement_person_id ON measurement; + DROP INDEX idx_measurement_concept_id ON measurement; + DROP INDEX idx_measurement_visit_id ON measurement; + + DROP INDEX idx_note_person_id ON note; + DROP INDEX idx_note_concept_id ON note; + DROP INDEX idx_note_visit_id ON note; + + DROP INDEX idx_note_nlp_note_id ON note_nlp; + DROP INDEX idx_note_nlp_concept_id ON note_nlp; + + DROP INDEX idx_observation_person_id ON observation; + DROP INDEX idx_observation_concept_id ON observation; + DROP INDEX idx_observation_visit_id ON observation; + + DROP INDEX idx_fact_relationship_id_1 ON fact_relationship; + DROP INDEX idx_fact_relationship_id_2 ON fact_relationship; + DROP INDEX idx_fact_relationship_id_3 ON fact_relationship; + + + + /************************ + Standardized health system data + ************************/ + + + + + + /************************ + Standardized health economics + ************************/ + + DROP INDEX idx_period_person_id ON payer_plan_period; + + + + + + /************************ + Standardized derived elements + ************************/ + + + DROP INDEX idx_cohort_subject_id ON cohort; + DROP INDEX idx_cohort_c_definition_id ON cohort; + + DROP INDEX idx_ca_subject_id ON cohort_attribute; + DROP INDEX idx_ca_definition_id ON cohort_attribute; + + DROP INDEX idx_drug_era_person_id ON drug_era; + DROP INDEX idx_drug_era_concept_id ON drug_era; + + DROP INDEX idx_dose_era_person_id ON dose_era; + DROP INDEX idx_dose_era_concept_id ON dose_era; + + DROP INDEX idx_condition_era_person_id ON condition_era; + DROP INDEX idx_condition_era_concept_id ON condition_era; + + SET @log_date = CONVERT(NVARCHAR(50),GETDATE(),121); + SET @log_message = @log_date + ' remove_indexes_constraints is ending execution' + RAISERROR (@log_message, 0, 1) WITH NOWAIT +END + +GO + diff --git a/sql/dacpac/dbo/Tables/attribute_definition.sql b/sql/dacpac/dbo/Tables/attribute_definition.sql new file mode 100644 index 0000000..bb07509 --- /dev/null +++ b/sql/dacpac/dbo/Tables/attribute_definition.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[attribute_definition] ( + [attribute_definition_id] INT NOT NULL, + [attribute_name] VARCHAR (255) NOT NULL, + [attribute_description] VARCHAR (MAX) NULL, + [attribute_type_concept_id] INT NOT NULL, + [attribute_syntax] VARCHAR (MAX) NULL, + CONSTRAINT [xpk_attribute_definition] PRIMARY KEY NONCLUSTERED ([attribute_definition_id] ASC), + CONSTRAINT [fpk_attribute_type_concept] FOREIGN KEY ([attribute_type_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_attribute_definition_id] + ON [dbo].[attribute_definition]([attribute_definition_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/care_site.sql b/sql/dacpac/dbo/Tables/care_site.sql new file mode 100644 index 0000000..4775ec3 --- /dev/null +++ b/sql/dacpac/dbo/Tables/care_site.sql @@ -0,0 +1,14 @@ +CREATE TABLE [dbo].[care_site] ( + [care_site_id] INT NOT NULL, + [care_site_name] VARCHAR (255) NULL, + [place_of_service_concept_id] INT NULL, + [location_id] INT NULL, + [care_site_source_value] VARCHAR (50) NULL, + [place_of_service_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_care_site] PRIMARY KEY NONCLUSTERED ([care_site_id] ASC), + CONSTRAINT [fpk_care_site_location] FOREIGN KEY ([location_id]) REFERENCES [dbo].[location] ([location_id]) +); + + +GO + diff --git a/sql/dacpac/dbo/Tables/cdm_source.sql b/sql/dacpac/dbo/Tables/cdm_source.sql new file mode 100644 index 0000000..cf94078 --- /dev/null +++ b/sql/dacpac/dbo/Tables/cdm_source.sql @@ -0,0 +1,16 @@ +CREATE TABLE [dbo].[cdm_source] ( + [cdm_source_name] VARCHAR (255) NOT NULL, + [cdm_source_abbreviation] VARCHAR (25) NULL, + [cdm_holder] VARCHAR (255) NULL, + [source_description] VARCHAR (MAX) NULL, + [source_documentation_reference] VARCHAR (255) NULL, + [cdm_etl_reference] VARCHAR (255) NULL, + [source_release_date] DATE NULL, + [cdm_release_date] DATE NULL, + [cdm_version] VARCHAR (10) NULL, + [vocabulary_version] VARCHAR (20) NULL +); + + +GO + diff --git a/sql/dacpac/dbo/Tables/clinical_metadata.sql b/sql/dacpac/dbo/Tables/clinical_metadata.sql new file mode 100644 index 0000000..f0395dc --- /dev/null +++ b/sql/dacpac/dbo/Tables/clinical_metadata.sql @@ -0,0 +1,14 @@ +CREATE TABLE [dbo].[clinical_metadata] ( + [timestamp] VARCHAR (50) NOT NULL, + [file_name] VARCHAR (50) NOT NULL, + [file_location] VARCHAR (50) NOT NULL, + [pipeline_name] VARCHAR (50) NOT NULL, + [pipeline_run_id] VARCHAR (50) NOT NULL, + [watermark_table] VARCHAR (255) NULL, + [source_rows_read] INT NOT NULL, + [sink_rows_copied] INT NOT NULL +); + + +GO + diff --git a/sql/dacpac/dbo/Tables/cohort.sql b/sql/dacpac/dbo/Tables/cohort.sql new file mode 100644 index 0000000..db96a5d --- /dev/null +++ b/sql/dacpac/dbo/Tables/cohort.sql @@ -0,0 +1,23 @@ +CREATE TABLE [dbo].[cohort] ( + [cohort_definition_id] INT NOT NULL, + [subject_id] INT NOT NULL, + [cohort_start_date] DATE NOT NULL, + [cohort_end_date] DATE NOT NULL, + CONSTRAINT [xpk_cohort] PRIMARY KEY NONCLUSTERED ([cohort_definition_id] ASC, [subject_id] ASC, [cohort_start_date] ASC, [cohort_end_date] ASC) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_cohort_subject_id] + ON [dbo].[cohort]([subject_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_cohort_c_definition_id] + ON [dbo].[cohort]([cohort_definition_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/cohort_attribute.sql b/sql/dacpac/dbo/Tables/cohort_attribute.sql new file mode 100644 index 0000000..ff89704 --- /dev/null +++ b/sql/dacpac/dbo/Tables/cohort_attribute.sql @@ -0,0 +1,29 @@ +CREATE TABLE [dbo].[cohort_attribute] ( + [cohort_definition_id] INT NOT NULL, + [cohort_start_date] DATE NOT NULL, + [cohort_end_date] DATE NOT NULL, + [subject_id] INT NOT NULL, + [attribute_definition_id] INT NOT NULL, + [value_as_number] FLOAT (53) NULL, + [value_as_concept_id] INT NULL, + CONSTRAINT [xpk_cohort_attribute] PRIMARY KEY NONCLUSTERED ([cohort_definition_id] ASC, [subject_id] ASC, [cohort_start_date] ASC, [cohort_end_date] ASC, [attribute_definition_id] ASC), + CONSTRAINT [fpk_ca_attribute_definition] FOREIGN KEY ([attribute_definition_id]) REFERENCES [dbo].[attribute_definition] ([attribute_definition_id]), + CONSTRAINT [fpk_ca_cohort_definition] FOREIGN KEY ([cohort_definition_id]) REFERENCES [dbo].[cohort_definition] ([cohort_definition_id]), + CONSTRAINT [fpk_ca_value] FOREIGN KEY ([value_as_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_ca_definition_id] + ON [dbo].[cohort_attribute]([cohort_definition_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_ca_subject_id] + ON [dbo].[cohort_attribute]([subject_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/cohort_definition.sql b/sql/dacpac/dbo/Tables/cohort_definition.sql new file mode 100644 index 0000000..ce90bdc --- /dev/null +++ b/sql/dacpac/dbo/Tables/cohort_definition.sql @@ -0,0 +1,22 @@ +CREATE TABLE [dbo].[cohort_definition] ( + [cohort_definition_id] INT NOT NULL, + [cohort_definition_name] VARCHAR (255) NOT NULL, + [cohort_definition_description] VARCHAR (MAX) NULL, + [definition_type_concept_id] INT NOT NULL, + [cohort_definition_syntax] VARCHAR (MAX) NULL, + [subject_concept_id] INT NOT NULL, + [cohort_initiation_date] DATE NULL, + CONSTRAINT [xpk_cohort_definition] PRIMARY KEY NONCLUSTERED ([cohort_definition_id] ASC), + CONSTRAINT [fpk_cohort_definition_concept] FOREIGN KEY ([definition_type_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_cohort_subject_concept] FOREIGN KEY ([subject_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_cohort_definition_id] + ON [dbo].[cohort_definition]([cohort_definition_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/concept.sql b/sql/dacpac/dbo/Tables/concept.sql new file mode 100644 index 0000000..1ab95dc --- /dev/null +++ b/sql/dacpac/dbo/Tables/concept.sql @@ -0,0 +1,50 @@ +CREATE TABLE [dbo].[concept] ( + [concept_id] INT NOT NULL, + [concept_name] VARCHAR (255) NOT NULL, + [domain_id] VARCHAR (20) NOT NULL, + [vocabulary_id] VARCHAR (20) NOT NULL, + [concept_class_id] VARCHAR (20) NOT NULL, + [standard_concept] VARCHAR (1) NULL, + [concept_code] VARCHAR (50) NOT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, + CONSTRAINT [xpk_concept] PRIMARY KEY NONCLUSTERED ([concept_id] ASC), + CONSTRAINT [fpk_concept_class] FOREIGN KEY ([concept_class_id]) REFERENCES [dbo].[concept_class] ([concept_class_id]), + CONSTRAINT [fpk_concept_domain] FOREIGN KEY ([domain_id]) REFERENCES [dbo].[domain] ([domain_id]), + CONSTRAINT [fpk_concept_vocabulary] FOREIGN KEY ([vocabulary_id]) REFERENCES [dbo].[vocabulary] ([vocabulary_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_code] + ON [dbo].[concept]([concept_code] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_domain_id] + ON [dbo].[concept]([domain_id] ASC); + + +GO + +CREATE UNIQUE CLUSTERED INDEX [idx_concept_concept_id] + ON [dbo].[concept]([concept_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_vocabluary_id] + ON [dbo].[concept]([vocabulary_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_class_id] + ON [dbo].[concept]([concept_class_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/concept_ancestor.sql b/sql/dacpac/dbo/Tables/concept_ancestor.sql new file mode 100644 index 0000000..a5d05a4 --- /dev/null +++ b/sql/dacpac/dbo/Tables/concept_ancestor.sql @@ -0,0 +1,25 @@ +CREATE TABLE [dbo].[concept_ancestor] ( + [ancestor_concept_id] INT NOT NULL, + [descendant_concept_id] INT NOT NULL, + [min_levels_of_separation] INT NOT NULL, + [max_levels_of_separation] INT NOT NULL, + CONSTRAINT [xpk_concept_ancestor] PRIMARY KEY NONCLUSTERED ([ancestor_concept_id] ASC, [descendant_concept_id] ASC), + CONSTRAINT [fpk_concept_ancestor_concept_1] FOREIGN KEY ([ancestor_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_concept_ancestor_concept_2] FOREIGN KEY ([descendant_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_ancestor_id_2] + ON [dbo].[concept_ancestor]([descendant_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_concept_ancestor_id_1] + ON [dbo].[concept_ancestor]([ancestor_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/concept_class.sql b/sql/dacpac/dbo/Tables/concept_class.sql new file mode 100644 index 0000000..2c430d7 --- /dev/null +++ b/sql/dacpac/dbo/Tables/concept_class.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[concept_class] ( + [concept_class_id] VARCHAR (20) NOT NULL, + [concept_class_name] VARCHAR (255) NOT NULL, + [concept_class_concept_id] INT NOT NULL, + CONSTRAINT [xpk_concept_class] PRIMARY KEY NONCLUSTERED ([concept_class_id] ASC), + CONSTRAINT [fpk_concept_class_concept] FOREIGN KEY ([concept_class_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE UNIQUE CLUSTERED INDEX [idx_concept_class_class_id] + ON [dbo].[concept_class]([concept_class_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/concept_relationship.sql b/sql/dacpac/dbo/Tables/concept_relationship.sql new file mode 100644 index 0000000..d222e83 --- /dev/null +++ b/sql/dacpac/dbo/Tables/concept_relationship.sql @@ -0,0 +1,34 @@ +CREATE TABLE [dbo].[concept_relationship] ( + [concept_id_1] INT NOT NULL, + [concept_id_2] INT NOT NULL, + [relationship_id] VARCHAR (20) NOT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, + CONSTRAINT [xpk_concept_relationship] PRIMARY KEY NONCLUSTERED ([concept_id_1] ASC, [concept_id_2] ASC, [relationship_id] ASC), + CONSTRAINT [fpk_concept_relationship_c_1] FOREIGN KEY ([concept_id_1]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_concept_relationship_c_2] FOREIGN KEY ([concept_id_2]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_concept_relationship_id] FOREIGN KEY ([relationship_id]) REFERENCES [dbo].[relationship] ([relationship_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_relationship_id_3] + ON [dbo].[concept_relationship]([relationship_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_relationship_id_2] + ON [dbo].[concept_relationship]([concept_id_2] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_concept_relationship_id_1] + ON [dbo].[concept_relationship]([concept_id_1] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/concept_synonym.sql b/sql/dacpac/dbo/Tables/concept_synonym.sql new file mode 100644 index 0000000..7c5c9ee --- /dev/null +++ b/sql/dacpac/dbo/Tables/concept_synonym.sql @@ -0,0 +1,18 @@ +CREATE TABLE [dbo].[concept_synonym] ( + [concept_id] INT NOT NULL, + [concept_synonym_name] VARCHAR (1000) NOT NULL, + [language_concept_id] INT NOT NULL, + CONSTRAINT [fpk_concept_synonym_concept] FOREIGN KEY ([concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_concept_synonym_language] FOREIGN KEY ([language_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [uq_concept_synonym] UNIQUE NONCLUSTERED ([concept_id] ASC, [concept_synonym_name] ASC, [language_concept_id] ASC) +); + + +GO + +CREATE CLUSTERED INDEX [idx_concept_synonym_id] + ON [dbo].[concept_synonym]([concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/condition_era.sql b/sql/dacpac/dbo/Tables/condition_era.sql new file mode 100644 index 0000000..abde1f7 --- /dev/null +++ b/sql/dacpac/dbo/Tables/condition_era.sql @@ -0,0 +1,25 @@ +CREATE TABLE [dbo].[condition_era] ( + [condition_era_id] INT NOT NULL, + [person_id] INT NOT NULL, + [condition_concept_id] INT NOT NULL, + [condition_era_start_date] DATE NOT NULL, + [condition_era_end_date] DATE NOT NULL, + [condition_occurrence_count] INT NULL, + CONSTRAINT [xpk_condition_era] PRIMARY KEY NONCLUSTERED ([condition_era_id] ASC) +); + + +GO + +CREATE CLUSTERED INDEX [idx_condition_era_person_id] + ON [dbo].[condition_era]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_condition_era_concept_id] + ON [dbo].[condition_era]([condition_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/condition_occurrence.sql b/sql/dacpac/dbo/Tables/condition_occurrence.sql new file mode 100644 index 0000000..8707333 --- /dev/null +++ b/sql/dacpac/dbo/Tables/condition_occurrence.sql @@ -0,0 +1,41 @@ +CREATE TABLE [dbo].[condition_occurrence] ( + [condition_occurrence_id] INT NOT NULL, + [person_id] INT NOT NULL, + [condition_concept_id] INT NOT NULL, + [condition_start_date] DATE NOT NULL, + [condition_start_datetime] DATETIME2 (7) NOT NULL, + [condition_end_date] DATE NULL, + [condition_end_datetime] DATETIME2 (7) NULL, + [condition_type_concept_id] INT NOT NULL, + [stop_reason] VARCHAR (20) NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [condition_source_value] VARCHAR (50) NULL, + [condition_source_concept_id] INT NULL, + [condition_status_source_value] VARCHAR (50) NULL, + [condition_status_concept_id] INT NULL, + CONSTRAINT [xpk_condition_occurrence] PRIMARY KEY NONCLUSTERED ([condition_occurrence_id] ASC), + CONSTRAINT [fpk_condition_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_condition_concept_id] + ON [dbo].[condition_occurrence]([condition_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_condition_person_id] + ON [dbo].[condition_occurrence]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_condition_visit_id] + ON [dbo].[condition_occurrence]([visit_occurrence_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/cost.sql b/sql/dacpac/dbo/Tables/cost.sql new file mode 100644 index 0000000..4ecd345 --- /dev/null +++ b/sql/dacpac/dbo/Tables/cost.sql @@ -0,0 +1,29 @@ +CREATE TABLE [dbo].[cost] ( + [cost_id] INT NOT NULL, + [cost_event_id] INT NOT NULL, + [cost_domain_id] VARCHAR (20) NOT NULL, + [cost_type_concept_id] INT NOT NULL, + [currency_concept_id] INT NULL, + [total_charge] FLOAT (53) NULL, + [total_cost] FLOAT (53) NULL, + [total_paid] FLOAT (53) NULL, + [paid_by_payer] FLOAT (53) NULL, + [paid_by_patient] FLOAT (53) NULL, + [paid_patient_copay] FLOAT (53) NULL, + [paid_patient_coinsurance] FLOAT (53) NULL, + [paid_patient_deductible] FLOAT (53) NULL, + [paid_by_primary] FLOAT (53) NULL, + [paid_ingredient_cost] FLOAT (53) NULL, + [paid_dispensing_fee] FLOAT (53) NULL, + [payer_plan_period_id] INT NULL, + [amount_allowed] FLOAT (53) NULL, + [revenue_code_concept_id] INT NULL, + [reveue_code_source_value] VARCHAR (50) NULL, + [drg_concept_id] INT NULL, + [drg_source_value] VARCHAR (3) NULL, + CONSTRAINT [xpk_visit_cost] PRIMARY KEY NONCLUSTERED ([cost_id] ASC) +); + + +GO + diff --git a/sql/dacpac/dbo/Tables/death.sql b/sql/dacpac/dbo/Tables/death.sql new file mode 100644 index 0000000..0757e85 --- /dev/null +++ b/sql/dacpac/dbo/Tables/death.sql @@ -0,0 +1,21 @@ +CREATE TABLE [dbo].[death] ( + [person_id] INT NOT NULL, + [death_date] DATE NOT NULL, + [death_datetime] DATETIME2 (7) NULL, + [death_type_concept_id] INT NOT NULL, + [cause_concept_id] INT NULL, + [cause_source_value] VARCHAR (50) NULL, + [cause_source_concept_id] INT NULL, + CONSTRAINT [xpk_death] PRIMARY KEY NONCLUSTERED ([person_id] ASC), + CONSTRAINT [fpk_death_cause_concept] FOREIGN KEY ([cause_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_death_person_id] + ON [dbo].[death]([person_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/device_exposure.sql b/sql/dacpac/dbo/Tables/device_exposure.sql new file mode 100644 index 0000000..69f1807 --- /dev/null +++ b/sql/dacpac/dbo/Tables/device_exposure.sql @@ -0,0 +1,40 @@ +CREATE TABLE [dbo].[device_exposure] ( + [device_exposure_id] INT NOT NULL, + [person_id] INT NOT NULL, + [device_concept_id] INT NOT NULL, + [device_exposure_start_date] DATE NOT NULL, + [device_exposure_start_datetime] DATETIME2 (7) NOT NULL, + [device_exposure_end_date] DATE NULL, + [device_exposure_end_datetime] DATETIME2 (7) NULL, + [device_type_concept_id] INT NOT NULL, + [unique_device_id] VARCHAR (50) NULL, + [quantity] INT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [device_source_value] VARCHAR (100) NULL, + [device_source_concept_id] INT NULL, + CONSTRAINT [xpk_device_exposure] PRIMARY KEY NONCLUSTERED ([device_exposure_id] ASC), + CONSTRAINT [fpk_device_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_device_person_id] + ON [dbo].[device_exposure]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_device_concept_id] + ON [dbo].[device_exposure]([device_concept_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_device_visit_id] + ON [dbo].[device_exposure]([visit_occurrence_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/domain.sql b/sql/dacpac/dbo/Tables/domain.sql new file mode 100644 index 0000000..76dea1f --- /dev/null +++ b/sql/dacpac/dbo/Tables/domain.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[domain] ( + [domain_id] VARCHAR (20) NOT NULL, + [domain_name] VARCHAR (255) NOT NULL, + [domain_concept_id] INT NOT NULL, + CONSTRAINT [xpk_domain] PRIMARY KEY NONCLUSTERED ([domain_id] ASC), + CONSTRAINT [fpk_domain_concept] FOREIGN KEY ([domain_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE UNIQUE CLUSTERED INDEX [idx_domain_domain_id] + ON [dbo].[domain]([domain_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/dose_era.sql b/sql/dacpac/dbo/Tables/dose_era.sql new file mode 100644 index 0000000..415d412 --- /dev/null +++ b/sql/dacpac/dbo/Tables/dose_era.sql @@ -0,0 +1,29 @@ +CREATE TABLE [dbo].[dose_era] ( + [dose_era_id] INT NOT NULL, + [person_id] INT NOT NULL, + [drug_concept_id] INT NOT NULL, + [unit_concept_id] INT NOT NULL, + [dose_value] FLOAT (53) NOT NULL, + [dose_era_start_date] DATE NOT NULL, + [dose_era_end_date] DATE NOT NULL, + CONSTRAINT [xpk_dose_era] PRIMARY KEY NONCLUSTERED ([dose_era_id] ASC), + CONSTRAINT [fpk_dose_era_concept] FOREIGN KEY ([drug_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_dose_era_person] FOREIGN KEY ([person_id]) REFERENCES [dbo].[person] ([person_id]), + CONSTRAINT [fpk_dose_era_unit_concept] FOREIGN KEY ([unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_dose_era_person_id] + ON [dbo].[dose_era]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_dose_era_concept_id] + ON [dbo].[dose_era]([drug_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/drug_era.sql b/sql/dacpac/dbo/Tables/drug_era.sql new file mode 100644 index 0000000..2c876d9 --- /dev/null +++ b/sql/dacpac/dbo/Tables/drug_era.sql @@ -0,0 +1,26 @@ +CREATE TABLE [dbo].[drug_era] ( + [drug_era_id] INT NOT NULL, + [person_id] INT NOT NULL, + [drug_concept_id] INT NOT NULL, + [drug_era_start_date] DATE NOT NULL, + [drug_era_end_date] DATE NOT NULL, + [drug_exposure_count] INT NULL, + [gap_days] INT NULL, + CONSTRAINT [xpk_drug_era] PRIMARY KEY NONCLUSTERED ([drug_era_id] ASC) +); + + +GO + +CREATE CLUSTERED INDEX [idx_drug_era_person_id] + ON [dbo].[drug_era]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_drug_era_concept_id] + ON [dbo].[drug_era]([drug_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/drug_exposure.sql b/sql/dacpac/dbo/Tables/drug_exposure.sql new file mode 100644 index 0000000..47ffe50 --- /dev/null +++ b/sql/dacpac/dbo/Tables/drug_exposure.sql @@ -0,0 +1,49 @@ +CREATE TABLE [dbo].[drug_exposure] ( + [drug_exposure_id] INT NOT NULL, + [person_id] INT NOT NULL, + [drug_concept_id] INT NOT NULL, + [drug_exposure_start_date] DATE NOT NULL, + [drug_exposure_start_datetime] DATETIME2 (7) NOT NULL, + [drug_exposure_end_date] DATE NOT NULL, + [drug_exposure_end_datetime] DATETIME2 (7) NULL, + [verbatim_end_date] DATE NULL, + [drug_type_concept_id] INT NOT NULL, + [stop_reason] VARCHAR (20) NULL, + [refills] INT NULL, + [quantity] FLOAT (53) NULL, + [days_supply] INT NULL, + [sig] VARCHAR (MAX) NULL, + [route_concept_id] INT NULL, + [lot_number] VARCHAR (50) NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [drug_source_value] VARCHAR (50) NULL, + [drug_source_concept_id] INT NULL, + [route_source_value] VARCHAR (50) NULL, + [dose_unit_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_drug_exposure] PRIMARY KEY NONCLUSTERED ([drug_exposure_id] ASC), + CONSTRAINT [fpk_drug_route_concept] FOREIGN KEY ([route_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_drug_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_drug_visit_id] + ON [dbo].[drug_exposure]([visit_occurrence_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_drug_person_id] + ON [dbo].[drug_exposure]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_drug_concept_id] + ON [dbo].[drug_exposure]([drug_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/drug_strength.sql b/sql/dacpac/dbo/Tables/drug_strength.sql new file mode 100644 index 0000000..015648d --- /dev/null +++ b/sql/dacpac/dbo/Tables/drug_strength.sql @@ -0,0 +1,36 @@ +CREATE TABLE [dbo].[drug_strength] ( + [drug_concept_id] INT NOT NULL, + [ingredient_concept_id] INT NOT NULL, + [amount_value] FLOAT (53) NULL, + [amount_unit_concept_id] INT NULL, + [numerator_value] FLOAT (53) NULL, + [numerator_unit_concept_id] INT NULL, + [denominator_value] FLOAT (53) NULL, + [denominator_unit_concept_id] INT NULL, + [box_size] INT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, + CONSTRAINT [xpk_drug_strength] PRIMARY KEY NONCLUSTERED ([drug_concept_id] ASC, [ingredient_concept_id] ASC), + CONSTRAINT [fpk_drug_strength_concept_1] FOREIGN KEY ([drug_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_drug_strength_concept_2] FOREIGN KEY ([ingredient_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_drug_strength_unit_1] FOREIGN KEY ([amount_unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_drug_strength_unit_2] FOREIGN KEY ([numerator_unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_drug_strength_unit_3] FOREIGN KEY ([denominator_unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_drug_strength_id_2] + ON [dbo].[drug_strength]([ingredient_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_drug_strength_id_1] + ON [dbo].[drug_strength]([drug_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/fact_relationship.sql b/sql/dacpac/dbo/Tables/fact_relationship.sql new file mode 100644 index 0000000..24aed19 --- /dev/null +++ b/sql/dacpac/dbo/Tables/fact_relationship.sql @@ -0,0 +1,32 @@ +CREATE TABLE [dbo].[fact_relationship] ( + [domain_concept_id_1] INT NOT NULL, + [fact_id_1] INT NOT NULL, + [domain_concept_id_2] INT NOT NULL, + [fact_id_2] INT NOT NULL, + [relationship_concept_id] INT NOT NULL, + CONSTRAINT [fpk_fact_domain_1] FOREIGN KEY ([domain_concept_id_1]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_fact_domain_2] FOREIGN KEY ([domain_concept_id_2]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_fact_relationship] FOREIGN KEY ([relationship_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_fact_relationship_id_2] + ON [dbo].[fact_relationship]([domain_concept_id_2] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_fact_relationship_id_3] + ON [dbo].[fact_relationship]([relationship_concept_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_fact_relationship_id_1] + ON [dbo].[fact_relationship]([domain_concept_id_1] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/location.sql b/sql/dacpac/dbo/Tables/location.sql new file mode 100644 index 0000000..ca10c40 --- /dev/null +++ b/sql/dacpac/dbo/Tables/location.sql @@ -0,0 +1,15 @@ +CREATE TABLE [dbo].[location] ( + [location_id] INT NOT NULL, + [address_1] VARCHAR (50) NULL, + [address_2] VARCHAR (50) NULL, + [city] VARCHAR (50) NULL, + [state] VARCHAR (2) NULL, + [zip] VARCHAR (9) NULL, + [county] VARCHAR (20) NULL, + [location_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_location] PRIMARY KEY NONCLUSTERED ([location_id] ASC) +); + + +GO + diff --git a/sql/dacpac/dbo/Tables/measurement.sql b/sql/dacpac/dbo/Tables/measurement.sql new file mode 100644 index 0000000..15e6288 --- /dev/null +++ b/sql/dacpac/dbo/Tables/measurement.sql @@ -0,0 +1,46 @@ +CREATE TABLE [dbo].[measurement] ( + [measurement_id] INT NOT NULL, + [person_id] INT NOT NULL, + [measurement_concept_id] INT NOT NULL, + [measurement_date] DATE NOT NULL, + [measurement_datetime] DATETIME2 (7) NULL, + [measurement_type_concept_id] INT NOT NULL, + [operator_concept_id] INT NULL, + [value_as_number] FLOAT (53) NULL, + [value_as_concept_id] INT NULL, + [unit_concept_id] INT NULL, + [range_low] FLOAT (53) NULL, + [range_high] FLOAT (53) NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [measurement_source_value] VARCHAR (50) NULL, + [measurement_source_concept_id] INT NULL, + [unit_source_value] VARCHAR (50) NULL, + [value_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_measurement] PRIMARY KEY NONCLUSTERED ([measurement_id] ASC), + CONSTRAINT [fpk_measurement_operator] FOREIGN KEY ([operator_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_measurement_unit] FOREIGN KEY ([unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_measurement_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_measurement_visit_id] + ON [dbo].[measurement]([visit_occurrence_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_measurement_concept_id] + ON [dbo].[measurement]([measurement_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_measurement_person_id] + ON [dbo].[measurement]([person_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/metadata.sql b/sql/dacpac/dbo/Tables/metadata.sql new file mode 100644 index 0000000..f5d32ae --- /dev/null +++ b/sql/dacpac/dbo/Tables/metadata.sql @@ -0,0 +1,9 @@ +CREATE TABLE [dbo].[metadata] ( + [metadata_concept_id] INT NOT NULL, + [metadata_type_concept_id] INT NOT NULL, + [name] VARCHAR (250) NOT NULL, + [value_as_string] VARCHAR (MAX) NULL, + [value_as_concept_id] INT NULL, + [metadata_date] DATE NULL, + [metadata_datetime] DATETIME2 (7) NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/note.sql b/sql/dacpac/dbo/Tables/note.sql new file mode 100644 index 0000000..fcd8a6c --- /dev/null +++ b/sql/dacpac/dbo/Tables/note.sql @@ -0,0 +1,45 @@ +CREATE TABLE [dbo].[note] ( + [note_id] INT NOT NULL, + [person_id] INT NOT NULL, + [note_date] DATE NOT NULL, + [note_datetime] DATETIME2 (7) NULL, + [note_type_concept_id] INT NOT NULL, + [note_class_concept_id] INT NOT NULL, + [note_title] VARCHAR (250) NULL, + [note_text] VARCHAR (MAX) NULL, + [encoding_concept_id] INT NOT NULL, + [language_concept_id] INT NOT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [note_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_note] PRIMARY KEY NONCLUSTERED ([note_id] ASC), + CONSTRAINT [fpk_language_concept] FOREIGN KEY ([language_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_note_class_concept] FOREIGN KEY ([note_class_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_note_encoding_concept] FOREIGN KEY ([encoding_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_note_person] FOREIGN KEY ([person_id]) REFERENCES [dbo].[person] ([person_id]), + CONSTRAINT [fpk_note_provider] FOREIGN KEY ([provider_id]) REFERENCES [dbo].[provider] ([provider_id]), + CONSTRAINT [fpk_note_type_concept] FOREIGN KEY ([note_type_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_note_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_note_concept_id] + ON [dbo].[note]([note_type_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_note_person_id] + ON [dbo].[note]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_note_visit_id] + ON [dbo].[note]([visit_occurrence_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/note_nlp.sql b/sql/dacpac/dbo/Tables/note_nlp.sql new file mode 100644 index 0000000..657bf1e --- /dev/null +++ b/sql/dacpac/dbo/Tables/note_nlp.sql @@ -0,0 +1,36 @@ +CREATE TABLE [dbo].[note_nlp] ( + [note_nlp_id] BIGINT NOT NULL, + [note_id] INT NOT NULL, + [section_concept_id] INT NULL, + [snippet] VARCHAR (250) NULL, + [offset] VARCHAR (250) NULL, + [lexical_variant] VARCHAR (250) NOT NULL, + [note_nlp_concept_id] INT NULL, + [note_nlp_source_concept_id] INT NULL, + [nlp_system] VARCHAR (250) NULL, + [nlp_date] DATE NOT NULL, + [nlp_datetime] DATETIME2 (7) NULL, + [term_exists] VARCHAR (1) NULL, + [term_temporal] VARCHAR (50) NULL, + [term_modifiers] VARCHAR (2000) NULL, + CONSTRAINT [xpk_note_nlp] PRIMARY KEY NONCLUSTERED ([note_nlp_id] ASC), + CONSTRAINT [fpk_note_nlp_concept] FOREIGN KEY ([note_nlp_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_note_nlp_note] FOREIGN KEY ([note_id]) REFERENCES [dbo].[note] ([note_id]), + CONSTRAINT [fpk_note_nlp_section_concept] FOREIGN KEY ([section_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_note_nlp_concept_id] + ON [dbo].[note_nlp]([note_nlp_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_note_nlp_note_id] + ON [dbo].[note_nlp]([note_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/observation.sql b/sql/dacpac/dbo/Tables/observation.sql new file mode 100644 index 0000000..31a1aea --- /dev/null +++ b/sql/dacpac/dbo/Tables/observation.sql @@ -0,0 +1,45 @@ +CREATE TABLE [dbo].[observation] ( + [observation_id] INT NOT NULL, + [person_id] INT NOT NULL, + [observation_concept_id] INT NOT NULL, + [observation_date] DATE NOT NULL, + [observation_datetime] DATETIME2 (7) NULL, + [observation_type_concept_id] INT NOT NULL, + [value_as_number] FLOAT (53) NULL, + [value_as_string] VARCHAR (60) NULL, + [value_as_concept_id] INT NULL, + [qualifier_concept_id] INT NULL, + [unit_concept_id] INT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [observation_source_value] VARCHAR (50) NULL, + [observation_source_concept_id] INT NULL, + [unit_source_value] VARCHAR (50) NULL, + [qualifier_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_observation] PRIMARY KEY NONCLUSTERED ([observation_id] ASC), + CONSTRAINT [fpk_observation_qualifier] FOREIGN KEY ([qualifier_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_observation_unit] FOREIGN KEY ([unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_observation_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_observation_person_id] + ON [dbo].[observation]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_observation_concept_id] + ON [dbo].[observation]([observation_concept_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_observation_visit_id] + ON [dbo].[observation]([visit_occurrence_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/observation_period.sql b/sql/dacpac/dbo/Tables/observation_period.sql new file mode 100644 index 0000000..8b3767e --- /dev/null +++ b/sql/dacpac/dbo/Tables/observation_period.sql @@ -0,0 +1,18 @@ +CREATE TABLE [dbo].[observation_period] ( + [observation_period_id] INT NOT NULL, + [person_id] INT NOT NULL, + [observation_period_start_date] DATE NOT NULL, + [observation_period_end_date] DATE NOT NULL, + [period_type_concept_id] INT NOT NULL, + CONSTRAINT [xpk_observation_period] PRIMARY KEY NONCLUSTERED ([observation_period_id] ASC) +); + + +GO + +CREATE CLUSTERED INDEX [idx_observation_period_id] + ON [dbo].[observation_period]([person_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/payer_plan_period.sql b/sql/dacpac/dbo/Tables/payer_plan_period.sql new file mode 100644 index 0000000..90fa16e --- /dev/null +++ b/sql/dacpac/dbo/Tables/payer_plan_period.sql @@ -0,0 +1,20 @@ +CREATE TABLE [dbo].[payer_plan_period] ( + [payer_plan_period_id] INT NOT NULL, + [person_id] INT NOT NULL, + [payer_plan_period_start_date] DATE NOT NULL, + [payer_plan_period_end_date] DATE NOT NULL, + [payer_source_value] VARCHAR (50) NULL, + [plan_source_value] VARCHAR (50) NULL, + [family_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_payer_plan_period] PRIMARY KEY NONCLUSTERED ([payer_plan_period_id] ASC) +); + + +GO + +CREATE CLUSTERED INDEX [idx_period_person_id] + ON [dbo].[payer_plan_period]([person_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/person.sql b/sql/dacpac/dbo/Tables/person.sql new file mode 100644 index 0000000..d41d8ad --- /dev/null +++ b/sql/dacpac/dbo/Tables/person.sql @@ -0,0 +1,34 @@ +CREATE TABLE [dbo].[person] ( + [person_id] INT NOT NULL, + [gender_concept_id] INT NOT NULL, + [year_of_birth] INT NOT NULL, + [month_of_birth] INT NULL, + [day_of_birth] INT NULL, + [birth_datetime] DATETIME2 (7) NULL, + [race_concept_id] INT NOT NULL, + [ethnicity_concept_id] INT NOT NULL, + [location_id] INT NULL, + [provider_id] INT NULL, + [care_site_id] INT NULL, + [person_source_value] VARCHAR (50) NULL, + [gender_source_value] VARCHAR (50) NULL, + [gender_source_concept_id] INT NULL, + [race_source_value] VARCHAR (50) NULL, + [race_source_concept_id] INT NULL, + [ethnicity_source_value] VARCHAR (50) NULL, + [ethnicity_source_concept_id] INT NULL, + CONSTRAINT [xpk_person] PRIMARY KEY NONCLUSTERED ([person_id] ASC), + CONSTRAINT [fpk_person_care_site] FOREIGN KEY ([care_site_id]) REFERENCES [dbo].[care_site] ([care_site_id]), + CONSTRAINT [fpk_person_location] FOREIGN KEY ([location_id]) REFERENCES [dbo].[location] ([location_id]), + CONSTRAINT [fpk_person_provider] FOREIGN KEY ([provider_id]) REFERENCES [dbo].[provider] ([provider_id]) +); + + +GO + +CREATE UNIQUE CLUSTERED INDEX [idx_person_id] + ON [dbo].[person]([person_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/procedure_occurrence.sql b/sql/dacpac/dbo/Tables/procedure_occurrence.sql new file mode 100644 index 0000000..2dd0d96 --- /dev/null +++ b/sql/dacpac/dbo/Tables/procedure_occurrence.sql @@ -0,0 +1,40 @@ +CREATE TABLE [dbo].[procedure_occurrence] ( + [procedure_occurrence_id] INT NOT NULL, + [person_id] INT NOT NULL, + [procedure_concept_id] INT NOT NULL, + [procedure_date] DATE NOT NULL, + [procedure_datetime] DATETIME2 (7) NOT NULL, + [procedure_type_concept_id] INT NOT NULL, + [modifier_concept_id] INT NULL, + [quantity] INT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [procedure_source_value] VARCHAR (50) NULL, + [procedure_source_concept_id] INT NULL, + [qualifier_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_procedure_occurrence] PRIMARY KEY NONCLUSTERED ([procedure_occurrence_id] ASC), + CONSTRAINT [fpk_procedure_modifier] FOREIGN KEY ([modifier_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_procedure_visit] FOREIGN KEY ([visit_occurrence_id]) REFERENCES [dbo].[visit_occurrence] ([visit_occurrence_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_procedure_visit_id] + ON [dbo].[procedure_occurrence]([visit_occurrence_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_procedure_concept_id] + ON [dbo].[procedure_occurrence]([procedure_concept_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_procedure_person_id] + ON [dbo].[procedure_occurrence]([person_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/provider.sql b/sql/dacpac/dbo/Tables/provider.sql new file mode 100644 index 0000000..b5c0484 --- /dev/null +++ b/sql/dacpac/dbo/Tables/provider.sql @@ -0,0 +1,20 @@ +CREATE TABLE [dbo].[provider] ( + [provider_id] INT NOT NULL, + [provider_name] VARCHAR (255) NULL, + [NPI] VARCHAR (20) NULL, + [DEA] VARCHAR (20) NULL, + [specialty_concept_id] INT NULL, + [care_site_id] INT NULL, + [year_of_birth] INT NULL, + [gender_concept_id] INT NULL, + [provider_source_value] VARCHAR (50) NULL, + [specialty_source_value] VARCHAR (50) NULL, + [specialty_source_concept_id] INT NULL, + [gender_source_value] VARCHAR (50) NULL, + [gender_source_concept_id] INT NULL, + CONSTRAINT [xpk_provider] PRIMARY KEY NONCLUSTERED ([provider_id] ASC) +); + + +GO + diff --git a/sql/dacpac/dbo/Tables/relationship.sql b/sql/dacpac/dbo/Tables/relationship.sql new file mode 100644 index 0000000..9d10029 --- /dev/null +++ b/sql/dacpac/dbo/Tables/relationship.sql @@ -0,0 +1,21 @@ +CREATE TABLE [dbo].[relationship] ( + [relationship_id] VARCHAR (20) NOT NULL, + [relationship_name] VARCHAR (255) NOT NULL, + [is_hierarchical] VARCHAR (1) NOT NULL, + [defines_ancestry] VARCHAR (1) NOT NULL, + [reverse_relationship_id] VARCHAR (20) NOT NULL, + [relationship_concept_id] INT NOT NULL, + CONSTRAINT [xpk_relationship] PRIMARY KEY NONCLUSTERED ([relationship_id] ASC), + CONSTRAINT [fpk_relationship_concept] FOREIGN KEY ([relationship_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_relationship_reverse] FOREIGN KEY ([reverse_relationship_id]) REFERENCES [dbo].[relationship] ([relationship_id]) +); + + +GO + +CREATE UNIQUE CLUSTERED INDEX [idx_relationship_rel_id] + ON [dbo].[relationship]([relationship_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/source_to_concept_map.sql b/sql/dacpac/dbo/Tables/source_to_concept_map.sql new file mode 100644 index 0000000..f192610 --- /dev/null +++ b/sql/dacpac/dbo/Tables/source_to_concept_map.sql @@ -0,0 +1,44 @@ +CREATE TABLE [dbo].[source_to_concept_map] ( + [source_code] VARCHAR (50) NOT NULL, + [source_concept_id] INT NOT NULL, + [source_vocabulary_id] VARCHAR (20) NOT NULL, + [source_code_description] VARCHAR (255) NULL, + [target_concept_id] INT NOT NULL, + [target_vocabulary_id] VARCHAR (20) NOT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, + CONSTRAINT [xpk_source_to_concept_map] PRIMARY KEY NONCLUSTERED ([source_vocabulary_id] ASC, [target_concept_id] ASC, [source_code] ASC, [valid_end_date] ASC), + CONSTRAINT [fpk_source_concept_id] FOREIGN KEY ([source_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_source_to_concept_map_c_1] FOREIGN KEY ([target_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_source_to_concept_map_v_1] FOREIGN KEY ([source_vocabulary_id]) REFERENCES [dbo].[vocabulary] ([vocabulary_id]), + CONSTRAINT [fpk_source_to_concept_map_v_2] FOREIGN KEY ([target_vocabulary_id]) REFERENCES [dbo].[vocabulary] ([vocabulary_id]) +); + + +GO + +CREATE NONCLUSTERED INDEX [idx_source_to_concept_map_code] + ON [dbo].[source_to_concept_map]([source_code] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_source_to_concept_map_id_2] + ON [dbo].[source_to_concept_map]([target_vocabulary_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_source_to_concept_map_id_1] + ON [dbo].[source_to_concept_map]([source_vocabulary_id] ASC); + + +GO + +CREATE CLUSTERED INDEX [idx_source_to_concept_map_id_3] + ON [dbo].[source_to_concept_map]([target_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/specimen.sql b/sql/dacpac/dbo/Tables/specimen.sql new file mode 100644 index 0000000..ed14d23 --- /dev/null +++ b/sql/dacpac/dbo/Tables/specimen.sql @@ -0,0 +1,40 @@ +CREATE TABLE [dbo].[specimen] ( + [specimen_id] INT NOT NULL, + [person_id] INT NOT NULL, + [specimen_concept_id] INT NOT NULL, + [specimen_type_concept_id] INT NOT NULL, + [specimen_date] DATE NOT NULL, + [specimen_datetime] DATETIME2 (7) NULL, + [quantity] FLOAT (53) NULL, + [unit_concept_id] INT NULL, + [anatomic_site_concept_id] INT NULL, + [disease_status_concept_id] INT NULL, + [specimen_source_id] VARCHAR (50) NULL, + [specimen_source_value] VARCHAR (50) NULL, + [unit_source_value] VARCHAR (50) NULL, + [anatomic_site_source_value] VARCHAR (50) NULL, + [disease_status_source_value] VARCHAR (50) NULL, + CONSTRAINT [xpk_specimen] PRIMARY KEY NONCLUSTERED ([specimen_id] ASC), + CONSTRAINT [fpk_specimen_concept] FOREIGN KEY ([specimen_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_specimen_person] FOREIGN KEY ([person_id]) REFERENCES [dbo].[person] ([person_id]), + CONSTRAINT [fpk_specimen_site_concept] FOREIGN KEY ([anatomic_site_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_specimen_status_concept] FOREIGN KEY ([disease_status_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_specimen_type_concept] FOREIGN KEY ([specimen_type_concept_id]) REFERENCES [dbo].[concept] ([concept_id]), + CONSTRAINT [fpk_specimen_unit_concept] FOREIGN KEY ([unit_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE CLUSTERED INDEX [idx_specimen_person_id] + ON [dbo].[specimen]([person_id] ASC); + + +GO + +CREATE NONCLUSTERED INDEX [idx_specimen_concept_id] + ON [dbo].[specimen]([specimen_concept_id] ASC); + + +GO + diff --git a/sql/dacpac/dbo/Tables/staging_attribute_definition.sql b/sql/dacpac/dbo/Tables/staging_attribute_definition.sql new file mode 100644 index 0000000..ed56e52 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_attribute_definition.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[staging_attribute_definition] ( + [attribute_definition_id] INT NOT NULL, + [attribute_name] VARCHAR (255) NOT NULL, + [attribute_description] VARCHAR (MAX) NULL, + [attribute_type_concept_id] INT NOT NULL, + [attribute_syntax] VARCHAR (MAX) NULL, +); + diff --git a/sql/dacpac/dbo/Tables/staging_care_site.sql b/sql/dacpac/dbo/Tables/staging_care_site.sql new file mode 100644 index 0000000..93e6975 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_care_site.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[staging_care_site] ( + [care_site_id] INT NOT NULL, + [care_site_name] VARCHAR (255) NULL, + [place_of_service_concept_id] INT NULL, + [location_id] INT NULL, + [care_site_source_value] VARCHAR (50) NULL, + [place_of_service_source_value] VARCHAR (50) NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_cdm_source.sql b/sql/dacpac/dbo/Tables/staging_cdm_source.sql new file mode 100644 index 0000000..767c11d --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_cdm_source.sql @@ -0,0 +1,13 @@ +CREATE TABLE [dbo].[staging_cdm_source] ( + [cdm_source_name] VARCHAR (255) NOT NULL, + [cdm_source_abbreviation] VARCHAR (25) NULL, + [cdm_holder] VARCHAR (255) NULL, + [source_description] VARCHAR (MAX) NULL, + [source_documentation_reference] VARCHAR (255) NULL, + [cdm_etl_reference] VARCHAR (255) NULL, + [source_release_date] DATE NULL, + [cdm_release_date] DATE NULL, + [cdm_version] VARCHAR (10) NULL, + [vocabulary_version] VARCHAR (20) NULL +); + diff --git a/sql/dacpac/dbo/Tables/staging_cohort.sql b/sql/dacpac/dbo/Tables/staging_cohort.sql new file mode 100644 index 0000000..67b3f82 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_cohort.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[staging_cohort] ( + [cohort_definition_id] INT NOT NULL, + [subject_id] INT NOT NULL, + [cohort_start_date] DATE NOT NULL, + [cohort_end_date] DATE NOT NULL, +); + + diff --git a/sql/dacpac/dbo/Tables/staging_cohort_attribute.sql b/sql/dacpac/dbo/Tables/staging_cohort_attribute.sql new file mode 100644 index 0000000..de47bfe --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_cohort_attribute.sql @@ -0,0 +1,10 @@ +CREATE TABLE [dbo].[staging_cohort_attribute] ( + [cohort_definition_id] INT NOT NULL, + [cohort_start_date] DATE NOT NULL, + [cohort_end_date] DATE NOT NULL, + [subject_id] INT NOT NULL, + [attribute_definition_id] INT NOT NULL, + [value_as_number] FLOAT (53) NULL, + [value_as_concept_id] INT NULL, +); + diff --git a/sql/dacpac/dbo/Tables/staging_cohort_definition.sql b/sql/dacpac/dbo/Tables/staging_cohort_definition.sql new file mode 100644 index 0000000..18e2602 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_cohort_definition.sql @@ -0,0 +1,10 @@ +CREATE TABLE [dbo].[staging_cohort_definition] ( + [cohort_definition_id] INT NOT NULL, + [cohort_definition_name] VARCHAR (255) NOT NULL, + [cohort_definition_description] VARCHAR (MAX) NULL, + [definition_type_concept_id] INT NOT NULL, + [cohort_definition_syntax] VARCHAR (MAX) NULL, + [subject_concept_id] INT NOT NULL, + [cohort_initiation_date] DATE NULL, +); + diff --git a/sql/dacpac/dbo/Tables/staging_concept.sql b/sql/dacpac/dbo/Tables/staging_concept.sql new file mode 100644 index 0000000..773b429 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_concept.sql @@ -0,0 +1,12 @@ +CREATE TABLE [dbo].[staging_concept] ( + [concept_id] INT NOT NULL, + [concept_name] VARCHAR (255) NOT NULL, + [domain_id] VARCHAR (20) NOT NULL, + [vocabulary_id] VARCHAR (20) NOT NULL, + [concept_class_id] VARCHAR (20) NOT NULL, + [standard_concept] VARCHAR (1) NULL, + [concept_code] VARCHAR (50) NOT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_concept_ancestor.sql b/sql/dacpac/dbo/Tables/staging_concept_ancestor.sql new file mode 100644 index 0000000..52cfee0 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_concept_ancestor.sql @@ -0,0 +1,6 @@ +CREATE TABLE [dbo].[staging_concept_ancestor] ( + [ancestor_concept_id] INT NOT NULL, + [descendant_concept_id] INT NOT NULL, + [min_levels_of_separation] INT NOT NULL, + [max_levels_of_separation] INT NOT NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_concept_class.sql b/sql/dacpac/dbo/Tables/staging_concept_class.sql new file mode 100644 index 0000000..e96a6b4 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_concept_class.sql @@ -0,0 +1,5 @@ +CREATE TABLE [dbo].[staging_concept_class] ( + [concept_class_id] VARCHAR (20) NOT NULL, + [concept_class_name] VARCHAR (255) NOT NULL, + [concept_class_concept_id] INT NOT NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_concept_relationship.sql b/sql/dacpac/dbo/Tables/staging_concept_relationship.sql new file mode 100644 index 0000000..c30547e --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_concept_relationship.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[staging_concept_relationship] ( + [concept_id_1] INT NOT NULL, + [concept_id_2] INT NOT NULL, + [relationship_id] VARCHAR (20) NOT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_concept_synonym.sql b/sql/dacpac/dbo/Tables/staging_concept_synonym.sql new file mode 100644 index 0000000..6a82b9a --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_concept_synonym.sql @@ -0,0 +1,5 @@ +CREATE TABLE [dbo].[staging_concept_synonym] ( + [concept_id] INT NOT NULL, + [concept_synonym_name] VARCHAR (1000) NOT NULL, + [language_concept_id] INT NOT NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_condition_era.sql b/sql/dacpac/dbo/Tables/staging_condition_era.sql new file mode 100644 index 0000000..a0e153c --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_condition_era.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[staging_condition_era] ( + [condition_era_id] INT NOT NULL, + [person_id] INT NOT NULL, + [condition_concept_id] INT NOT NULL, + [condition_era_start_date] DATE NOT NULL, + [condition_era_end_date] DATE NOT NULL, + [condition_occurrence_count] INT NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_condition_occurrence.sql b/sql/dacpac/dbo/Tables/staging_condition_occurrence.sql new file mode 100644 index 0000000..85489aa --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_condition_occurrence.sql @@ -0,0 +1,18 @@ +CREATE TABLE [dbo].[staging_condition_occurrence] ( + [condition_occurrence_id] INT NOT NULL, + [person_id] INT NOT NULL, + [condition_concept_id] INT NOT NULL, + [condition_start_date] DATE NOT NULL, + [condition_start_datetime] DATETIME2 (7) NULL, + [condition_end_date] DATE NULL, + [condition_end_datetime] DATETIME2 (7) NULL, + [condition_type_concept_id] INT NOT NULL, + [stop_reason] VARCHAR (20) NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [visit_detail_id] INT NULL, + [condition_source_value] VARCHAR (50) NULL, + [condition_source_concept_id] INT NULL, + [condition_status_source_value] VARCHAR (50) NULL, + [condition_status_concept_id] INT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_cost.sql b/sql/dacpac/dbo/Tables/staging_cost.sql new file mode 100644 index 0000000..271f93e --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_cost.sql @@ -0,0 +1,25 @@ +CREATE TABLE [dbo].[staging_cost] ( + [cost_id] INT NOT NULL, + [cost_event_id] INT NOT NULL, + [cost_domain_id] VARCHAR (20) NOT NULL, + [cost_type_concept_id] INT NOT NULL, + [currency_concept_id] INT NULL, + [total_charge] FLOAT (53) NULL, + [total_cost] FLOAT (53) NULL, + [total_paid] FLOAT (53) NULL, + [paid_by_payer] FLOAT (53) NULL, + [paid_by_patient] FLOAT (53) NULL, + [paid_patient_copay] FLOAT (53) NULL, + [paid_patient_coinsurance] FLOAT (53) NULL, + [paid_patient_deductible] FLOAT (53) NULL, + [paid_by_primary] FLOAT (53) NULL, + [paid_ingredient_cost] FLOAT (53) NULL, + [paid_dispensing_fee] FLOAT (53) NULL, + [payer_plan_period_id] INT NULL, + [amount_allowed] FLOAT (53) NULL, + [revenue_code_concept_id] INT NULL, + [reveue_code_source_value] VARCHAR (50) NULL, + [drg_concept_id] INT NULL, + [drg_source_value] VARCHAR (3) NULL +); + diff --git a/sql/dacpac/dbo/Tables/staging_death.sql b/sql/dacpac/dbo/Tables/staging_death.sql new file mode 100644 index 0000000..5580614 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_death.sql @@ -0,0 +1,9 @@ +CREATE TABLE [dbo].[staging_death] ( + [person_id] INT NOT NULL, + [death_date] DATE NOT NULL, + [death_datetime] DATETIME2 (7) NULL, + [death_type_concept_id] INT NOT NULL, + [cause_concept_id] INT NULL, + [cause_source_value] VARCHAR (50) NULL, + [cause_source_concept_id] INT NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_device_exposure.sql b/sql/dacpac/dbo/Tables/staging_device_exposure.sql new file mode 100644 index 0000000..7a625a4 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_device_exposure.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[staging_device_exposure] ( + [device_exposure_id] INT NOT NULL, + [person_id] INT NOT NULL, + [device_concept_id] INT NOT NULL, + [device_exposure_start_date] DATE NOT NULL, + [device_exposure_start_datetime] DATETIME2 (7) NULL, + [device_exposure_end_date] DATE NULL, + [device_exposure_end_datetime] DATETIME2 (7) NULL, + [device_type_concept_id] INT NOT NULL, + [unique_device_id] VARCHAR (50) NULL, + [quantity] INT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [visit_detail_id] INT NULL, + [device_source_value] VARCHAR (100) NULL, + [device_source_concept_id] INT NULL +); + + diff --git a/sql/dacpac/dbo/Tables/staging_domain.sql b/sql/dacpac/dbo/Tables/staging_domain.sql new file mode 100644 index 0000000..ba155a8 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_domain.sql @@ -0,0 +1,5 @@ +CREATE TABLE [dbo].[staging_domain] ( + [domain_id] VARCHAR (20) NOT NULL, + [domain_name] VARCHAR (255) NOT NULL, + [domain_concept_id] INT NOT NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_dose_era.sql b/sql/dacpac/dbo/Tables/staging_dose_era.sql new file mode 100644 index 0000000..8b3b949 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_dose_era.sql @@ -0,0 +1,10 @@ +CREATE TABLE [dbo].[staging_dose_era] ( + [dose_era_id] INT NOT NULL, + [person_id] INT NOT NULL, + [drug_concept_id] INT NOT NULL, + [unit_concept_id] INT NOT NULL, + [dose_value] FLOAT (53) NOT NULL, + [dose_era_start_date] DATE NOT NULL, + [dose_era_end_date] DATE NOT NULL, +); + diff --git a/sql/dacpac/dbo/Tables/staging_drug_era.sql b/sql/dacpac/dbo/Tables/staging_drug_era.sql new file mode 100644 index 0000000..8692688 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_drug_era.sql @@ -0,0 +1,9 @@ +CREATE TABLE [dbo].[staging_drug_era] ( + [drug_era_id] INT NOT NULL, + [person_id] INT NOT NULL, + [drug_concept_id] INT NOT NULL, + [drug_era_start_date] DATE NOT NULL, + [drug_era_end_date] DATE NOT NULL, + [drug_exposure_count] INT NULL, + [gap_days] INT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_drug_exposure.sql b/sql/dacpac/dbo/Tables/staging_drug_exposure.sql new file mode 100644 index 0000000..fa4b593 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_drug_exposure.sql @@ -0,0 +1,25 @@ +CREATE TABLE [dbo].[staging_drug_exposure] ( + [drug_exposure_id] INT NOT NULL, + [person_id] INT NOT NULL, + [drug_concept_id] INT NOT NULL, + [drug_exposure_start_date] DATE NOT NULL, + [drug_exposure_start_datetime] DATETIME2 (7) NULL, + [drug_exposure_end_date] DATE NOT NULL, + [drug_exposure_end_datetime] DATETIME2 (7) NULL, + [verbatim_end_date] DATE NULL, + [drug_type_concept_id] INT NOT NULL, + [stop_reason] VARCHAR (20) NULL, + [refills] INT NULL, + [quantity] FLOAT (53) NULL, + [days_supply] INT NULL, + [sig] VARCHAR (MAX) NULL, + [route_concept_id] INT NULL, + [lot_number] VARCHAR (50) NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [visit_detail_id] INT NULL, + [drug_source_value] VARCHAR (50) NULL, + [drug_source_concept_id] INT NULL, + [route_source_value] VARCHAR (50) NULL, + [dose_unit_source_value] VARCHAR (50) NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_drug_strength.sql b/sql/dacpac/dbo/Tables/staging_drug_strength.sql new file mode 100644 index 0000000..07e106a --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_drug_strength.sql @@ -0,0 +1,14 @@ +CREATE TABLE [dbo].[staging_drug_strength] ( + [drug_concept_id] INT NOT NULL, + [ingredient_concept_id] INT NOT NULL, + [amount_value] FLOAT (53) NULL, + [amount_unit_concept_id] INT NULL, + [numerator_value] FLOAT (53) NULL, + [numerator_unit_concept_id] INT NULL, + [denominator_value] FLOAT (53) NULL, + [denominator_unit_concept_id] INT NULL, + [box_size] INT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_fact_relationship.sql b/sql/dacpac/dbo/Tables/staging_fact_relationship.sql new file mode 100644 index 0000000..3a6a0d2 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_fact_relationship.sql @@ -0,0 +1,7 @@ +CREATE TABLE [dbo].[staging_fact_relationship] ( + [domain_concept_id_1] INT NOT NULL, + [fact_id_1] INT NOT NULL, + [domain_concept_id_2] INT NOT NULL, + [fact_id_2] INT NOT NULL, + [relationship_concept_id] INT NOT NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_location.sql b/sql/dacpac/dbo/Tables/staging_location.sql new file mode 100644 index 0000000..ec48ced --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_location.sql @@ -0,0 +1,11 @@ +CREATE TABLE [dbo].[staging_location] ( + [location_id] INT NOT NULL, + [address_1] VARCHAR (50) NULL, + [address_2] VARCHAR (50) NULL, + [city] VARCHAR (50) NULL, + [state] VARCHAR (2) NULL, + [zip] VARCHAR (9) NULL, + [county] VARCHAR (20) NULL, + [location_source_value] VARCHAR (50) NULL +); + diff --git a/sql/dacpac/dbo/Tables/staging_measurement.sql b/sql/dacpac/dbo/Tables/staging_measurement.sql new file mode 100644 index 0000000..98531ea --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_measurement.sql @@ -0,0 +1,22 @@ +CREATE TABLE [dbo].[staging_measurement] ( + [measurement_id] INT NOT NULL, + [person_id] INT NOT NULL, + [measurement_concept_id] INT NOT NULL, + [measurement_date] DATE NOT NULL, + [measurement_datetime] DATETIME2 (7) NULL, + [measurement_time] VARCHAR (10) NULL, + [measurement_type_concept_id] INT NOT NULL, + [operator_concept_id] INT NULL, + [value_as_number] FLOAT (53) NULL, + [value_as_concept_id] INT NULL, + [unit_concept_id] INT NULL, + [range_low] FLOAT (53) NULL, + [range_high] FLOAT (53) NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [visit_detail_id] INT NULL, + [measurement_source_value] VARCHAR (50) NULL, + [measurement_source_concept_id] INT NULL, + [unit_source_value] VARCHAR (50) NULL, + [value_source_value] VARCHAR (50) NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_metadata.sql b/sql/dacpac/dbo/Tables/staging_metadata.sql new file mode 100644 index 0000000..98cb67b --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_metadata.sql @@ -0,0 +1,9 @@ +CREATE TABLE [dbo].[staging_metadata] ( + [metadata_concept_id] INT NOT NULL, + [metadata_type_concept_id] INT NOT NULL, + [name] VARCHAR (250) NOT NULL, + [value_as_string] VARCHAR (MAX) NULL, + [value_as_concept_id] INT NULL, + [metadata_date] DATE NULL, + [metadata_datetime] DATETIME2 (7) NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_note.sql b/sql/dacpac/dbo/Tables/staging_note.sql new file mode 100644 index 0000000..5d7e258 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_note.sql @@ -0,0 +1,15 @@ +CREATE TABLE [dbo].[staging_note] ( + [note_id] INT NOT NULL, + [person_id] INT NOT NULL, + [note_date] DATE NOT NULL, + [note_datetime] DATETIME2 (7) NULL, + [note_type_concept_id] INT NOT NULL, + [note_class_concept_id] INT NOT NULL, + [note_title] VARCHAR (250) NULL, + [note_text] VARCHAR (MAX) NULL, + [encoding_concept_id] INT NOT NULL, + [language_concept_id] INT NOT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [note_source_value] VARCHAR (50) NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_note_nlp.sql b/sql/dacpac/dbo/Tables/staging_note_nlp.sql new file mode 100644 index 0000000..182669a --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_note_nlp.sql @@ -0,0 +1,16 @@ +CREATE TABLE [dbo].[staging_note_nlp] ( + [note_nlp_id] BIGINT NOT NULL, + [note_id] INT NOT NULL, + [section_concept_id] INT NULL, + [snippet] VARCHAR (250) NULL, + [offset] VARCHAR (250) NULL, + [lexical_variant] VARCHAR (250) NOT NULL, + [note_nlp_concept_id] INT NULL, + [note_nlp_source_concept_id] INT NULL, + [nlp_system] VARCHAR (250) NULL, + [nlp_date] DATE NOT NULL, + [nlp_datetime] DATETIME2 (7) NULL, + [term_exists] VARCHAR (1) NULL, + [term_temporal] VARCHAR (50) NULL, + [term_modifiers] VARCHAR (2000) NULL, +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_observation.sql b/sql/dacpac/dbo/Tables/staging_observation.sql new file mode 100644 index 0000000..f17343c --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_observation.sql @@ -0,0 +1,20 @@ +CREATE TABLE [dbo].[staging_observation] ( + [observation_id] INT NOT NULL, + [person_id] INT NOT NULL, + [observation_concept_id] INT NOT NULL, + [observation_date] DATE NOT NULL, + [observation_datetime] DATETIME2 (7) NULL, + [observation_type_concept_id] INT NOT NULL, + [value_as_number] FLOAT (53) NULL, + [value_as_string] VARCHAR (60) NULL, + [value_as_concept_id] INT NULL, + [qualifier_concept_id] INT NULL, + [unit_concept_id] INT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [visit_detail_id] INT NULL, + [observation_source_value] VARCHAR (50) NULL, + [observation_source_concept_id] INT NULL, + [unit_source_value] VARCHAR (50) NULL, + [qualifier_source_value] VARCHAR (50) NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_observation_period.sql b/sql/dacpac/dbo/Tables/staging_observation_period.sql new file mode 100644 index 0000000..8ea2aa7 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_observation_period.sql @@ -0,0 +1,7 @@ +CREATE TABLE [dbo].[staging_observation_period] ( + [observation_period_id] INT NOT NULL, + [person_id] INT NOT NULL, + [observation_period_start_date] DATE NOT NULL, + [observation_period_end_date] DATE NOT NULL, + [period_type_concept_id] INT NOT NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_payer_plan_period.sql b/sql/dacpac/dbo/Tables/staging_payer_plan_period.sql new file mode 100644 index 0000000..9d2feaa --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_payer_plan_period.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[staging_payer_plan_period] ( + [payer_plan_period_id] INT NOT NULL, + [person_id] INT NOT NULL, + [payer_plan_period_start_date] DATE NOT NULL, + [payer_plan_period_end_date] DATE NOT NULL, + [payer_concept_id] INT NULL, + [payer_source_value] VARCHAR (50) NULL, + [payer_source_concept_id] INT NULL, + [plan_concept_id] INT NULL, + [plan_source_value] VARCHAR (50) NULL, + [plan_source_concept_id] INT NULL, + [sponsor_concept_id] INT NULL, + [sponsor_source_value] VARCHAR (50) NULL, + [sponsor_source_concept_id] INT NULL, + [family_source_value] VARCHAR (50) NULL, + [stop_reason_concept_id] INT NULL, + [stop_reason_source_value] VARCHAR (50) NULL, + [stop_reason_source_concept_id] INT NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_person.sql b/sql/dacpac/dbo/Tables/staging_person.sql new file mode 100644 index 0000000..0301130 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_person.sql @@ -0,0 +1,20 @@ +CREATE TABLE [dbo].[staging_person] ( + [person_id] INT NOT NULL, + [gender_concept_id] INT NOT NULL, + [year_of_birth] INT NOT NULL, + [month_of_birth] INT NULL, + [day_of_birth] INT NULL, + [birth_datetime] DATETIME2 (7) NULL, + [race_concept_id] INT NOT NULL, + [ethnicity_concept_id] INT NOT NULL, + [location_id] INT NULL, + [provider_id] INT NULL, + [care_site_id] INT NULL, + [person_source_value] VARCHAR (50) NULL, + [gender_source_value] VARCHAR (50) NULL, + [gender_source_concept_id] INT NULL, + [race_source_value] VARCHAR (50) NULL, + [race_source_concept_id] INT NULL, + [ethnicity_source_value] VARCHAR (50) NULL, + [ethnicity_source_concept_id] INT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_procedure_occurrence.sql b/sql/dacpac/dbo/Tables/staging_procedure_occurrence.sql new file mode 100644 index 0000000..8edc031 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_procedure_occurrence.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[staging_procedure_occurrence] ( + [procedure_occurrence_id] INT NOT NULL, + [person_id] INT NOT NULL, + [procedure_concept_id] INT NOT NULL, + [procedure_date] DATE NOT NULL, + [procedure_datetime] DATETIME2 (7) NULL, + [procedure_type_concept_id] INT NOT NULL, + [modifier_concept_id] INT NULL, + [quantity] INT NULL, + [provider_id] INT NULL, + [visit_occurrence_id] INT NULL, + [visit_detail_id] INT NULL, + [procedure_source_value] VARCHAR (50) NULL, + [procedure_source_concept_id] INT NULL, + [modifier_source_value] VARCHAR (50) NULL +); + diff --git a/sql/dacpac/dbo/Tables/staging_provider.sql b/sql/dacpac/dbo/Tables/staging_provider.sql new file mode 100644 index 0000000..9ccd528 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_provider.sql @@ -0,0 +1,15 @@ +CREATE TABLE [dbo].[staging_provider] ( + [provider_id] INT NOT NULL, + [provider_name] VARCHAR (255) NULL, + [NPI] VARCHAR (20) NULL, + [DEA] VARCHAR (20) NULL, + [specialty_concept_id] INT NULL, + [care_site_id] INT NULL, + [year_of_birth] INT NULL, + [gender_concept_id] INT NULL, + [provider_source_value] VARCHAR (50) NULL, + [specialty_source_value] VARCHAR (50) NULL, + [specialty_source_concept_id] INT NULL, + [gender_source_value] VARCHAR (50) NULL, + [gender_source_concept_id] INT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_relationship.sql b/sql/dacpac/dbo/Tables/staging_relationship.sql new file mode 100644 index 0000000..3c65d47 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_relationship.sql @@ -0,0 +1,8 @@ +CREATE TABLE [dbo].[staging_relationship] ( + [relationship_id] VARCHAR (20) NOT NULL, + [relationship_name] VARCHAR (255) NOT NULL, + [is_hierarchical] VARCHAR (1) NOT NULL, + [defines_ancestry] VARCHAR (1) NOT NULL, + [reverse_relationship_id] VARCHAR (20) NOT NULL, + [relationship_concept_id] INT NOT NULL, +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/staging_source_to_concept_map.sql b/sql/dacpac/dbo/Tables/staging_source_to_concept_map.sql new file mode 100644 index 0000000..580c687 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_source_to_concept_map.sql @@ -0,0 +1,12 @@ +CREATE TABLE [dbo].[staging_source_to_concept_map] ( + [source_code] VARCHAR (50) NOT NULL, + [source_concept_id] INT NOT NULL, + [source_vocabulary_id] VARCHAR (20) NOT NULL, + [source_code_description] VARCHAR (255) NULL, + [target_concept_id] INT NOT NULL, + [target_vocabulary_id] VARCHAR (20) NOT NULL, + [valid_start_date] DATE NOT NULL, + [valid_end_date] DATE NOT NULL, + [invalid_reason] VARCHAR (1) NULL, +); + diff --git a/sql/dacpac/dbo/Tables/staging_specimen.sql b/sql/dacpac/dbo/Tables/staging_specimen.sql new file mode 100644 index 0000000..e138fdc --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_specimen.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[staging_specimen] ( + [specimen_id] INT NOT NULL, + [person_id] INT NOT NULL, + [specimen_concept_id] INT NOT NULL, + [specimen_type_concept_id] INT NOT NULL, + [specimen_date] DATE NOT NULL, + [specimen_datetime] DATETIME2 (7) NULL, + [quantity] FLOAT (53) NULL, + [unit_concept_id] INT NULL, + [anatomic_site_concept_id] INT NULL, + [disease_status_concept_id] INT NULL, + [specimen_source_id] VARCHAR (50) NULL, + [specimen_source_value] VARCHAR (50) NULL, + [unit_source_value] VARCHAR (50) NULL, + [anatomic_site_source_value] VARCHAR (50) NULL, + [disease_status_source_value] VARCHAR (50) NULL, +); diff --git a/sql/dacpac/dbo/Tables/staging_visit_detail.sql b/sql/dacpac/dbo/Tables/staging_visit_detail.sql new file mode 100644 index 0000000..22343d6 --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_visit_detail.sql @@ -0,0 +1,21 @@ +CREATE TABLE [dbo].[staging_visit_detail] ( + [visit_detail_id] INT NOT NULL, + [person_id] INT NOT NULL, + [visit_detail_concept_id] INT NOT NULL, + [visit_detail_start_date] DATE NOT NULL, + [visit_detail_start_datetime] DATETIME2 (7) NULL, + [visit_detail_end_date] DATE NOT NULL, + [visit_detail_end_datetime] DATETIME2 (7) NULL, + [visit_detail_type_concept_id] INT NOT NULL, + [provider_id] INT NULL, + [care_site_id] INT NULL, + [admitting_source_concept_id] INT NULL, + [discharge_to_concept_id] INT NULL, + [preceding_visit_detail_id] INT NULL, + [visit_detail_source_value] VARCHAR (50) NULL, + [visit_detail_source_concept_id] INT NULL, + [admitting_source_value] VARCHAR (50) NULL, + [discharge_to_source_value] VARCHAR (50) NULL, + [visit_detail_parent_id] INT NULL, + [visit_occurrence_id] INT NOT NULL +); diff --git a/sql/dacpac/dbo/Tables/staging_visit_occurrence.sql b/sql/dacpac/dbo/Tables/staging_visit_occurrence.sql new file mode 100644 index 0000000..6c4e6db --- /dev/null +++ b/sql/dacpac/dbo/Tables/staging_visit_occurrence.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[staging_visit_occurrence] ( + [visit_occurrence_id] INT NOT NULL, + [person_id] INT NOT NULL, + [visit_concept_id] INT NOT NULL, + [visit_start_date] DATE NOT NULL, + [visit_start_datetime] DATETIME2 (7) NULL, + [visit_end_date] DATE NOT NULL, + [visit_end_datetime] DATETIME2 (7) NULL, + [visit_type_concept_id] INT NOT NULL, + [provider_id] INT NULL, + [care_site_id] INT NULL, + [visit_source_value] VARCHAR (50) NULL, + [visit_source_concept_id] INT NULL, + [admitting_source_concept_id] INT NULL, + [admitting_source_value] VARCHAR (50) NULL, + [discharge_to_concept_id] INT NULL, + [discharge_to_source_value] VARCHAR (50) NULL, + [preceding_visit_occurrence_id] INT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/visit_detail.sql b/sql/dacpac/dbo/Tables/visit_detail.sql new file mode 100644 index 0000000..c2e3961 --- /dev/null +++ b/sql/dacpac/dbo/Tables/visit_detail.sql @@ -0,0 +1,21 @@ +CREATE TABLE [dbo].[visit_detail] ( + [visit_detail_id] INT NOT NULL, + [person_id] INT NOT NULL, + [visit_detail_concept_id] INT NOT NULL, + [visit_detail_start_date] DATE NOT NULL, + [visit_detail_start_datetime] DATETIME2 (7) NULL, + [visit_detail_end_date] DATE NOT NULL, + [visit_detail_end_datetime] DATETIME2 (7) NULL, + [visit_detail_type_concept_id] INT NOT NULL, + [provider_id] INT NULL, + [care_site_id] INT NULL, + [admitting_source_concept_id] INT NULL, + [discharge_to_concept_id] INT NULL, + [preceding_visit_detail_id] INT NULL, + [visit_detail_source_value] VARCHAR (50) NULL, + [visit_detail_source_concept_id] INT NULL, + [admitting_source_value] VARCHAR (50) NULL, + [discharge_to_source_value] VARCHAR (50) NULL, + [visit_detail_parent_id] INT NULL, + [visit_occurrence_id] INT NOT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/visit_occurrence.sql b/sql/dacpac/dbo/Tables/visit_occurrence.sql new file mode 100644 index 0000000..f0e42ca --- /dev/null +++ b/sql/dacpac/dbo/Tables/visit_occurrence.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[visit_occurrence] ( + [visit_occurrence_id] INT NOT NULL, + [person_id] INT NOT NULL, + [visit_concept_id] INT NOT NULL, + [visit_start_date] DATE NOT NULL, + [visit_start_datetime] DATETIME2 (7) NULL, + [visit_end_date] DATE NOT NULL, + [visit_end_datetime] DATETIME2 (7) NULL, + [visit_type_concept_id] INT NOT NULL, + [provider_id] INT NULL, + [care_site_id] INT NULL, + [visit_source_value] VARCHAR (50) NULL, + [visit_source_concept_id] INT NULL, + [admitting_source_concept_id] INT NULL, + [admitting_source_value] VARCHAR (50) NULL, + [discharge_to_concept_id] INT NULL, + [discharge_to_source_value] VARCHAR (50) NULL, + [preceding_visit_occurrence_id] INT NULL +); \ No newline at end of file diff --git a/sql/dacpac/dbo/Tables/vocabulary.sql b/sql/dacpac/dbo/Tables/vocabulary.sql new file mode 100644 index 0000000..b1eef1e --- /dev/null +++ b/sql/dacpac/dbo/Tables/vocabulary.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[vocabulary] ( + [vocabulary_id] VARCHAR (20) NOT NULL, + [vocabulary_name] VARCHAR (255) NOT NULL, + [vocabulary_reference] VARCHAR (255) NULL, + [vocabulary_version] VARCHAR (255) NULL, + [vocabulary_concept_id] INT NOT NULL, + CONSTRAINT [xpk_vocabulary] PRIMARY KEY NONCLUSTERED ([vocabulary_id] ASC), + CONSTRAINT [fpk_vocabulary_concept] FOREIGN KEY ([vocabulary_concept_id]) REFERENCES [dbo].[concept] ([concept_id]) +); + + +GO + +CREATE UNIQUE CLUSTERED INDEX [idx_vocabulary_vocabulary_id] + ON [dbo].[vocabulary]([vocabulary_id] ASC); + + +GO + diff --git a/sql/dacpac/omop.sqlproj b/sql/dacpac/omop.sqlproj new file mode 100644 index 0000000..eea6411 --- /dev/null +++ b/sql/dacpac/omop.sqlproj @@ -0,0 +1,157 @@ + + + + Debug + AnyCPU + omop.sqlproj + 2.0 + 4.1 + {8191D04E-73A6-4978-B4A2-98CBE236E923} + Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider + Database + + + omop.sqlproj + omop.sqlproj + 1033, CI + BySchemaAndSchemaType + True + v4.5 + CS + Properties + False + True + True + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/terraform/main.tf b/terraform/main.tf index 471146c..8edf765 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -150,12 +150,25 @@ resource "azurerm_mssql_database" "OHDSI-CDMV5" { command = "sqlcmd -U omop_admin -P ${var.omop_password} -S ${var.prefix}-${var.environment}-omop-sql-server.database.windows.net -d ${var.prefix}_${var.environment}_omop_db -i '../sql/OMOP_CDM_sql_server_ddl.sql' -o ${var.log_file}" } - # optionally create staging tables to aid in loading clinical data into the CDM + # optionally create staging tables and SPROCs to aid in loading clinical data into the CDM /* provisioner "local-exec" { command = "sqlcmd -U omop_admin -P ${var.omop_password} -S ${var.prefix}-${var.environment}-omop-sql-server.database.windows.net -d ${var.prefix}_${var.environment}_omop_db -i '../sql/OMOP_CDM_sql_server_staging_ddl.sql' -o ${var.log_file}" } + provisioner "local-exec" { + command = "sqlcmd -U omop_admin -P ${var.omop_password} -S ${var.prefix}-${var.environment}-omop-sql-server.database.windows.net -d ${var.prefix}_${var.environment}_omop_db -i '../sql/SPROC_add_indexes_constraints.sql' -o ${var.log_file}" + } + + provisioner "local-exec" { + command = "sqlcmd -U omop_admin -P ${var.omop_password} -S ${var.prefix}-${var.environment}-omop-sql-server.database.windows.net -d ${var.prefix}_${var.environment}_omop_db -i '../sql/SPROC_remove_indexes_constraints.sql' -o ${var.log_file}" + } + + provisioner "local-exec" { + command = "sqlcmd -U omop_admin -P ${var.omop_password} -S ${var.prefix}-${var.environment}-omop-sql-server.database.windows.net -d ${var.prefix}_${var.environment}_omop_db -i '../sql/SPROC_move_data_to_permanent_tables.sql' -o ${var.log_file}" + } + */ + # import cdm v5 vocabulary provisioner "local-exec" { command = "../scripts/vocab_import.sh ${var.prefix}-${var.environment}-omop-sql-server.database.windows.net ${var.prefix}_${var.environment}_omop_db omop_admin ${var.omop_password}"