MySqlDb (v 8.0) 的设计:当我决定不对 table 中的外键施加 "Not null" 约束时,我可能做出哪些牺牲?

Design of MySqlDb (v 8.0): What are the possible sacrifices I make when I decide not to put "Not null" constraint on a foreign key in the table?

我有一个与 this 相关的问题已经回答了关于 MySql 数据库设计的问题。我想知道有什么可能 problems/sacrifices 与不对 table 中的外键放置“非空”约束的决定有关? (如链接问题中所述,我可以将多个外键合二为一table,上传数据时我不必总是知道所有外键)

这里有一个例子(简化版): 我的数据库中有三个 table:

  1. 公司
  2. 投资者
  3. 投资 投资 table 除其他外还有以下列:

问题: 我想知道最终用户 f.e 会受到什么影响。数据分析师,我何时允许投资者 FK 为“空值”。

因此我认为 Vojta F 最好地回答了我的问题,他从数据库用户的角度向我展示了我的解决方案的优缺点。

作为数据库用户(即不是数据库管理员),如果您在上传时不知道外键的值,我认为从外键中省略 not null 约束是完全可以的。这种遗漏的影响是双重的:

  • 正面:您上传新数据会更容易 - 您不会被迫插入 fkey 值,只要您在加入此专栏时意识到这一点,我认为就可以了,
  • 负面:数据完整性较弱:在多个表之间解析记录将更加困难,加入时您必须考虑 nulls。

一般来说,使用 NULL 增益 超过任何性能等,损失(甚至增益)。

消耗的space小到不值得计算

速度方面的考虑通常是不存在的。优化器根据索引列的 NULLability 做一些 少数 不同的事情。但是,同样,您拥有(或不拥有)NULL 的好处可能会超过任何不利因素。

存在少量 限制。 PRIMARY KEY 必须包含 NOT NULL 列。