У меня есть набор из трех таблиц (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
.