внешний ключ, ссылающийся на две таблицы - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть набор из трех таблиц (runStats, failedRuns и readsInfo), как показано ниже (я создаю базу данных и таблицы с использованием модуля sqalchemy в Python):

#### Create the runstats table
c.execute('''CREATE TABLE IF NOT EXISTS runStats (
            runStats_ID Int NOT NULL AUTO_INCREMENT,
            samplesheet_name varchar(100),
            run_ID varchar(100),
            minimal_cluster_density varchar(100),
            percentage_clusters_post_filter FLOAT,
            percentage_reads_w_quality_greater_than_Q30 FLOAT,
            percentage_aligned_phiX_reads FLOAT,
            error_rate FLOAT,
            UNIQUE (runStats_ID, samplesheet_name, run_ID, minimal_cluster_density, percentage_clusters_post_filter, percentage_reads_w_quality_greater_than_Q30, percentage_aligned_phiX_reads, error_rate),
            PRIMARY KEY (runStats_ID)
            )''')
#### add the column run_ID as unique index, so that it can be used as a foreign key in the table readsInfo
c.execute("""ALTER TABLE runStats ADD UNIQUE INDEX run_ID_UNIQUE (run_ID)""")


#### create the table failedRuns
c.execute("""CREATE TABLE IF NOT EXISTS failedRuns (
        fail_ID Int NOT NULL AUTO_INCREMENT,
        run_ID varchar(100),
        reason_fail varchar(100),
        PRIMARY KEY (fail_ID),
        UNIQUE(fail_ID, run_ID, reason_fail)
        )""")
#### add the unique index on the column run_ID, as this should also be referenced as a foreign key
c.execute("""ALTER TABLE failedRuns ADD UNIQUE INDEX run_ID_UNIQUE (run_ID)""")


#### Create the readsInfo table
c.execute("""CREATE TABLE IF NOT EXISTS readsInfo (
        readsInfo_ID Int NOT NULL AUTO_INCREMENT,
        run_ID varchar(100),
        total_number_of_reads BIGINT,
        total_number_of_reads_post_filter BIGINT,
        percentage_reads_identified_post_filter FLOAT,
        cv FLOAT,
        min FLOAT,
        max FLOAT,
        UNIQUE(readsInfo_ID, total_number_of_reads, total_number_of_reads_post_filter, percentage_reads_identified_post_filter, cv, min, max, run_ID),
        PRIMARY KEY (readsInfo_ID),
        FOREIGN KEY (run_ID) REFERENCES runStats(run_ID)
        )""")

В приведенном выше коде у меня есть FK в поле run_ID в таблице readsInfo, которое ссылается на поле run_ID в таблице runStats.Дело в том, что в этом столбце я должен принимать значения, которые присутствуют не только в поле run_ID в таблице runStats, но и в поле run_ID в таблице failedRuns (с учетом набора run_IDs они перейдут в поле run_ID в таблице runStats или в таблице failedRuns).

Короче говоря, поле run_ID в таблице readsInfo должно ссылаться на поле run_ID в таблице readsInfo или failedRuns.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...