Jai*_*ake 3 mysql normalization database-design
我有 3 种不同类型的数据集:
所有这 3 个都有相同类型的子表,其中将有指向这些表的外键。
什么类型的设计最好?
main_type列表示每条记录是活动、通知还是交易。子表将只有一个外键列。具有相同类型的列与具有相同的实体类型不同。 规范化与代码重用不同。
规范化是将您的列以这样的方式排列到表中,以避免插入、更新和删除异常。它是关于减少可能导致这些异常的冗余种类,而不是因为它们看起来相似而将它们放在一起。
作为首选,您应该让数据库引擎使用其声明性约束(外键、唯一键等)来保护数据的完整性。这样可以节省编写应用程序代码来执行此操作,并且从长远来看可以减少系统错误。
这意味着您应该在默认情况下至少瞄准第三范式 (3NF),然后再考虑是否需要任何非规范化。
从这个角度来看,您的第一个选择并不好,因为您将三种不同类型的子数据塞入一个表中。您无法以这种方式干净或轻松地控制参照完整性。您仅有的两个常规实用选项是 2 和 3。
在选项 2 和选项 3 之间进行选择取决于具体情况,并且可能在很大程度上取决于您的个人喜好。有些人会避免选项 2,因为他们认为所有的 null 都是邪恶的。其他人会避免选项 3,因为他们不喜欢有太多不同的表。这是一场没有明确、合乎逻辑的答案的“圣战”辩论。
出于实际目的,查看您的三个主要表,我会说它们看起来并没有太多共同之处。有一点重叠,但不是很多。 因此,我倾向于选项 3。 将您的表分开,以便您的代码和数据保持干净。
顺便说一句:您没有显示子表的详细信息。如果这三个子表具有相同的结构并且您担心应用程序代码重复,请考虑创建一个处理子表结构的类,并为三个子表中的每一个从该类继承。这将为您提供代码重用,而不会影响数据完整性。