TL;DR:证明在实践中,alter table table_name drop foreign key constraint_name
语句的执行不会破坏现有数据。重要的考虑是语句本身的执行;考虑无关紧要的事后数据更改。(打个比方:打开马厩门是有害的行为,而不是马螺栓。)
我和我的老板对于是否在 MySQL/InnoDB 数据库中使用外键有不同的看法。我赞成使用它们来强制执行 RI 并利用ON DELETE CASCADE
和ON UPDATE RESTRICT
/ SET NULL
,而他反对(相信他可以在应用程序级别强制执行 RI)。
他的论点主要是:
我的论点主要是:
从本质上讲,如果我能证明删除外键本身的行为(无论后续数据插入/更新如何)不会破坏现有数据,他就会认同我的想法。我看不出有什么方法可以证明它们的有用性/优势,因为我不确定如何令人满意地观察/记录drop foreign key
执行后立即产生的效果,而不是将执行前的数据与执行后的数据进行比较。
那么,我如何通过证明以后删除/更改外键的行为不会破坏现有数据,而使用它们不会导致任何问题来说服我的老板我们应该使用外键?我如何最好地设置实际使用测试?
注意:我不太想证明我使用 FK 是正确的(从自负的角度来看),但是在 DBMS 级别使用它们比在应用程序代码中使用它们更有益于数据和应用程序代码等级。
mysql innodb foreign-key database-design referential-integrity
我正在尝试改进我最近开始工作的生物医学科学实验室的数据存储。现有的工作流程非常糟糕,涉及许多不同格式的 Excel 工作表,所有这些工作表都通过复制粘贴和错误宏的过程进行聚合。
我的目的是创建一个简单的 python 脚本,它将实验的所有数据聚合到 SQLite 数据库中,然后生成必要的 CSV/XLSX 输出。
我的问题是,对于我们实验的单次试验,我们最终在大约 10 个不同的时间点记录了大约 100 个变量。我最初的冲动是创建一个value
和variable
表:
CREATE TABLE value (val_id INTEGER PRIMARY KEY,
value TEXT,
var_id INTEGER,
event_id INTEGER,
exp_id INTEGER,
FOREIGN KEY (var_id) REFERENCES variable(var_id),
FOREIGN KEY (event_id) REFERENCES event(event_id),
FOREIGN KEY (exp_id) REFERENCES experiemnt(exp_id)
);
CREATE TABLE variable (var_id INTEGER PRIMARY KEY,
var_name TEXT,
var_type TEXT
);
value:
val_id | value | var_id | ...
0 | 10 | 0
1 | "ROSC"| 5
variable: …
Run Code Online (Sandbox Code Playgroud)