library(RPostgres)
library(tidyverse)
## ── Attaching packages ────────────────── tidyverse 1.3.0.9000 ──
## ✓ ggplot2 3.2.1            ✓ purrr   0.3.3.9000  
## ✓ tibble  2.99.99.9014     ✓ dplyr   0.8.4       
## ✓ tidyr   1.0.2            ✓ stringr 1.4.0       
## ✓ readr   1.3.1.9000       ✓ forcats 0.4.0
## ── Conflicts ────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(dm)
## 
## Attaching package: 'dm'
## The following object is masked from 'package:stats':
## 
##     filter
user <- keyring::key_get("aact-db-user")
password <- keyring::key_get("aact-db-password", user = user)

con <- dbConnect(
  Postgres(),
  dbname="aact",
  host="aact-db.ctti-clinicaltrials.org",
  port=5432, user = user, password = password
)

dm <- dm::dm_from_src(con, schema = "ctgov")

dm_fk <-
  dm %>%
  dm_add_pk(baseline_counts, id) %>%
  dm_add_pk(baseline_measurements, id) %>%
  dm_add_pk(brief_summaries, id) %>%
  dm_add_pk(browse_conditions, id) %>%
  dm_add_pk(browse_interventions, id) %>%
  dm_add_pk(calculated_values, id) %>%
  dm_add_pk(central_contacts, id) %>%
  dm_add_pk(conditions, id) %>%
  dm_add_pk(countries, id) %>%
  dm_add_pk(design_group_interventions, id) %>%
  dm_add_pk(design_groups, id) %>%
  dm_add_pk(design_outcomes, id) %>%
  dm_add_pk(designs, id) %>%
  dm_add_pk(detailed_descriptions, id) %>%
  dm_add_pk(documents, id) %>%
  dm_add_pk(drop_withdrawals, id) %>%
  dm_add_pk(eligibilities, id) %>%
  dm_add_pk(facilities, id) %>%
  dm_add_pk(facility_contacts, id) %>%
  dm_add_pk(facility_investigators, id) %>%
  dm_add_pk(id_information, id) %>%
  dm_add_pk(intervention_other_names, id) %>%
  dm_add_pk(interventions, id) %>%
  dm_add_pk(ipd_information_types, id) %>%
  dm_add_pk(keywords, id) %>%
  dm_add_pk(links, id) %>%
  dm_add_pk(mesh_headings, id) %>%
  dm_add_pk(mesh_terms, id) %>%
  dm_add_pk(milestones, id) %>%
  dm_add_pk(outcome_analyses, id) %>%
  dm_add_pk(outcome_analysis_groups, id) %>%
  dm_add_pk(outcome_counts, id) %>%
  dm_add_pk(outcome_measurements, id) %>%
  dm_add_pk(outcomes, id) %>%
  dm_add_pk(overall_officials, id) %>%
  dm_add_pk(participant_flows, id) %>%
  dm_add_pk(pending_results, id) %>%
  dm_add_pk(provided_documents, id) %>%
  dm_add_pk(reported_events, id) %>%
  dm_add_pk(responsible_parties, id) %>%
  dm_add_pk(result_agreements, id) %>%
  dm_add_pk(result_contacts, id) %>%
  dm_add_pk(result_groups, id) %>%
  dm_add_pk(sponsors, id) %>%
  dm_add_pk(study_references, id) %>%
  dm_add_pk(studies, nct_id) %>%
  dm_add_fk(baseline_counts, nct_id, studies) %>%
  dm_add_fk(baseline_counts, result_group_id, result_groups) %>%
  dm_add_fk(baseline_measurements, nct_id, studies) %>%
  dm_add_fk(baseline_measurements, result_group_id, result_groups) %>%
  dm_add_fk(brief_summaries, nct_id, studies) %>%
  dm_add_fk(browse_conditions, nct_id, studies) %>%
  dm_add_fk(browse_interventions, nct_id, studies) %>%
  dm_add_fk(calculated_values, nct_id, studies) %>%
  dm_add_fk(central_contacts, nct_id, studies) %>%
  dm_add_fk(conditions, nct_id, studies) %>%
  dm_add_fk(countries, nct_id, studies) %>%
  dm_add_fk(design_group_interventions, nct_id, studies) %>%
  dm_add_fk(design_group_interventions, design_group_id, design_groups) %>%
  dm_add_fk(design_group_interventions, intervention_id, interventions) %>%
  dm_add_fk(design_groups, nct_id, studies) %>%
  dm_add_fk(design_outcomes, nct_id, studies) %>%
  dm_add_fk(designs, nct_id, studies) %>%
  dm_add_fk(detailed_descriptions, nct_id, studies) %>%
  dm_add_fk(documents, nct_id, studies) %>%
  dm_add_fk(drop_withdrawals, nct_id, studies) %>%
  dm_add_fk(drop_withdrawals, result_group_id, result_groups) %>%
  dm_add_fk(eligibilities, nct_id, studies) %>%
  dm_add_fk(facilities, nct_id, studies) %>%
  dm_add_fk(facility_contacts, nct_id, studies) %>%
  dm_add_fk(facility_contacts, facility_id, facilities) %>%
  dm_add_fk(facility_investigators, nct_id, studies) %>%
  dm_add_fk(facility_investigators, facility_id, facilities) %>%
  dm_add_fk(id_information, nct_id, studies) %>%
  dm_add_fk(intervention_other_names, nct_id, studies) %>%
  dm_add_fk(intervention_other_names, intervention_id, interventions) %>%
  dm_add_fk(interventions, nct_id, studies) %>%
  dm_add_fk(ipd_information_types, nct_id, studies) %>%
  dm_add_fk(keywords, nct_id, studies) %>%
  dm_add_fk(links, nct_id, studies) %>%
  dm_add_fk(milestones, nct_id, studies) %>%
  dm_add_fk(milestones, result_group_id, result_groups) %>%
  dm_add_fk(outcome_analyses, nct_id, studies) %>%
  dm_add_fk(outcome_analyses, outcome_id, outcomes) %>%
  dm_add_fk(outcome_analysis_groups, nct_id, studies) %>%
  dm_add_fk(outcome_analysis_groups, outcome_analysis_id, outcome_analyses) %>%
  dm_add_fk(outcome_analysis_groups, result_group_id, result_groups) %>%
  dm_add_fk(outcome_counts, nct_id, studies) %>%
  dm_add_fk(outcome_counts, outcome_id, outcomes) %>%
  dm_add_fk(outcome_counts, result_group_id, result_groups) %>%
  dm_add_fk(outcome_measurements, nct_id, studies) %>%
  dm_add_fk(outcome_measurements, outcome_id, outcomes) %>%
  dm_add_fk(outcome_measurements, result_group_id, result_groups) %>%
  dm_add_fk(outcomes, nct_id, studies) %>%
  dm_add_fk(overall_officials, nct_id, studies) %>%
  dm_add_fk(participant_flows, nct_id, studies) %>%
  dm_add_fk(pending_results, nct_id, studies) %>%
  dm_add_fk(provided_documents, nct_id, studies) %>%
  dm_add_fk(reported_events, nct_id, studies) %>%
  dm_add_fk(reported_events, result_group_id, result_groups) %>%
  dm_add_fk(responsible_parties, nct_id, studies) %>%
  dm_add_fk(result_agreements, nct_id, studies) %>%
  dm_add_fk(result_contacts, nct_id, studies) %>%
  dm_add_fk(result_groups, nct_id, studies) %>%
  dm_add_fk(sponsors, nct_id, studies) %>%
  dm_add_fk(studies, nct_id, studies) %>%
  dm_add_fk(study_references, nct_id, studies)

dm_fk %>%
  dm_examine_constraints()
## ℹ All constraints satisfied.
dm_fk %>%
  dm_draw()
%0 baseline_counts baseline_counts id nct_id result_group_id result_groups result_groups id nct_id baseline_counts:result_group_id->result_groups:id studies studies nct_id baseline_counts:nct_id->studies:nct_id baseline_measurements baseline_measurements id nct_id result_group_id baseline_measurements:result_group_id->result_groups:id baseline_measurements:nct_id->studies:nct_id brief_summaries brief_summaries id nct_id brief_summaries:nct_id->studies:nct_id browse_conditions browse_conditions id nct_id browse_conditions:nct_id->studies:nct_id browse_interventions browse_interventions id nct_id browse_interventions:nct_id->studies:nct_id calculated_values calculated_values id nct_id calculated_values:nct_id->studies:nct_id central_contacts central_contacts id nct_id central_contacts:nct_id->studies:nct_id conditions conditions id nct_id conditions:nct_id->studies:nct_id countries countries id nct_id countries:nct_id->studies:nct_id design_group_interventions design_group_interventions id nct_id design_group_id intervention_id design_groups design_groups id nct_id design_group_interventions:design_group_id->design_groups:id interventions interventions id nct_id design_group_interventions:intervention_id->interventions:id design_group_interventions:nct_id->studies:nct_id design_groups:nct_id->studies:nct_id design_outcomes design_outcomes id nct_id design_outcomes:nct_id->studies:nct_id designs designs id nct_id designs:nct_id->studies:nct_id detailed_descriptions detailed_descriptions id nct_id detailed_descriptions:nct_id->studies:nct_id documents documents id nct_id documents:nct_id->studies:nct_id drop_withdrawals drop_withdrawals id nct_id result_group_id drop_withdrawals:result_group_id->result_groups:id drop_withdrawals:nct_id->studies:nct_id eligibilities eligibilities id nct_id eligibilities:nct_id->studies:nct_id facilities facilities id nct_id facilities:nct_id->studies:nct_id facility_contacts facility_contacts id nct_id facility_id facility_contacts:facility_id->facilities:id facility_contacts:nct_id->studies:nct_id facility_investigators facility_investigators id nct_id facility_id facility_investigators:facility_id->facilities:id facility_investigators:nct_id->studies:nct_id id_information id_information id nct_id id_information:nct_id->studies:nct_id intervention_other_names intervention_other_names id nct_id intervention_id intervention_other_names:intervention_id->interventions:id intervention_other_names:nct_id->studies:nct_id interventions:nct_id->studies:nct_id ipd_information_types ipd_information_types id nct_id ipd_information_types:nct_id->studies:nct_id keywords keywords id nct_id keywords:nct_id->studies:nct_id links links id nct_id links:nct_id->studies:nct_id mesh_headings mesh_headings id mesh_terms mesh_terms id milestones milestones id nct_id result_group_id milestones:result_group_id->result_groups:id milestones:nct_id->studies:nct_id outcome_analyses outcome_analyses id nct_id outcome_id outcomes outcomes id nct_id outcome_analyses:outcome_id->outcomes:id outcome_analyses:nct_id->studies:nct_id outcome_analysis_groups outcome_analysis_groups id nct_id outcome_analysis_id result_group_id outcome_analysis_groups:outcome_analysis_id->outcome_analyses:id outcome_analysis_groups:result_group_id->result_groups:id outcome_analysis_groups:nct_id->studies:nct_id outcome_counts outcome_counts id nct_id outcome_id result_group_id outcome_counts:outcome_id->outcomes:id outcome_counts:result_group_id->result_groups:id outcome_counts:nct_id->studies:nct_id outcome_measurements outcome_measurements id nct_id outcome_id result_group_id outcome_measurements:outcome_id->outcomes:id outcome_measurements:result_group_id->result_groups:id outcome_measurements:nct_id->studies:nct_id outcomes:nct_id->studies:nct_id overall_officials overall_officials id nct_id overall_officials:nct_id->studies:nct_id participant_flows participant_flows id nct_id participant_flows:nct_id->studies:nct_id pending_results pending_results id nct_id pending_results:nct_id->studies:nct_id provided_documents provided_documents id nct_id provided_documents:nct_id->studies:nct_id reported_events reported_events id nct_id result_group_id reported_events:result_group_id->result_groups:id reported_events:nct_id->studies:nct_id responsible_parties responsible_parties id nct_id responsible_parties:nct_id->studies:nct_id result_agreements result_agreements id nct_id result_agreements:nct_id->studies:nct_id result_contacts result_contacts id nct_id result_contacts:nct_id->studies:nct_id result_groups:nct_id->studies:nct_id sponsors sponsors id nct_id sponsors:nct_id->studies:nct_id studies:nct_id->studies:nct_id study_references study_references id nct_id study_references:nct_id->studies:nct_id