多张相似表与一张主表

jak*_*ake 5 mysql best-practices

我是一名 Web 应用程序开发人员,在数据库设计方面经验不足,因此感谢任何人的意见。

当我第一次构建这个 Web 应用程序时,该应用程序管理一种类型的对象(表)和一些属性(列)。随着应用程序的增长,出现了非常相似的对象的其他类型,因此我为每个对象类型创建了额外的表。(你可以说所有的对象类型都继承自同一个类/原型。)我发现我的每个对象类型的表几乎都相同,因为每个对象类型共享大约 90% 的相同属性类型。例如,表可能具有几乎完全相同的列名(& 数据类型),但一个表可能有 1-2 个额外的列来引用特定于该对象类型的属性。

由于所有对象类型都非常相似(就像 Dog、Cat 和 Mouse 都继承自 Animal 类一样),将它们全部放在同一个表中并在以下情况下简单地允许某些列包含 NULL 值是否明智?列与该类型无关?或者还有其他一些我没有考虑的选择吗?

作为参考,这里有一些我已经评论过的类似帖子:

1)当有多个“类型”表时有​​哪些设计选择

2)/sf/ask/631528691/

3)数据库设计:划分多个相同的表,好还是坏?

小智 6

创建Animal包含所有动物共享信息的表格。将另一列添加到Animal名为type或类似的表中。在此,指定动物是猫、狗、老鼠还是其他任何动物。

然后,创建CatDogMouse具有表AnimalID(主键),为外键。每个表都有专门针对 Cats、Dogs 和 Mice 的列。该Mouse表可能有一个列Favorite_cheese或一些类似的列,而普通的动物表不会。要获得完整的鼠标记录,您可以将两个表连接在一起。

这允许您拥有一个相对精简的Animal表,同时仍然支持子类化功能。