Database design 如果选择了枚举/查找表的特定值,如何为附加数据构造表?

Database design 如果选择了枚举/查找表的特定值,如何为附加数据构造表?,database-design,Database Design,如果在表中的枚举或查找列中选择了特定值,我希望存储额外的数据。显而易见的选择是在表中增加一列,但这将导致一个大部分为空的列,这似乎是一种糟糕的方法。还有其他选项/方法吗?多个表是一个选项。它类似于面向对象的代码,只涉及数据库表。假设您有一个水果对象,下拉列表指定水果的类型:香蕉、苹果、橘子、西瓜 所以你的水果桌上会有你的ID,重量,颜色,价格,等字段。然后香蕉也可能有果味、长度、成熟度、品牌、捆绑等。苹果会有果味、风味、袋装、打蜡等。橘子会有果味、打蜡、风味、袋装等。西瓜会有果味、剪型、无籽等

如果在表中的枚举或查找列中选择了特定值,我希望存储额外的数据。显而易见的选择是在表中增加一列,但这将导致一个大部分为空的列,这似乎是一种糟糕的方法。还有其他选项/方法吗?

多个表是一个选项。它类似于面向对象的代码,只涉及数据库表。假设您有一个水果对象,下拉列表指定水果的类型:香蕉、苹果、橘子、西瓜

所以你的水果桌上会有你的ID,重量,颜色,价格,等字段。然后香蕉也可能有果味、长度、成熟度、品牌、捆绑等。苹果会有果味、风味、袋装、打蜡等。橘子会有果味、打蜡、风味、袋装等。西瓜会有果味、剪型、无籽等


显然,您可以在这里添加多个级别,因为苹果和橙子有一些公共字段,这可能有意义,也可能没有意义,这取决于您的需要。这样,当您查找水果数据时,您可以查看两个表以获取所有数据,或者只查看水果表以获取基本数据。

更简洁的方法是使用另一个表,其中包含原始表中的行与可选值之间的映射。例如,假设您正在存储员工记录,那么您有一个包含4列的表:Id、名称、部门和SalesQuota。现在,SalesQuota值仅用于Department=Sales的行

将该表分开,这样您就有了带有Id、名称和部门的employee表,以及带有Id和SalesQuota的sales quota表。您可以在id上连接两个表,以获得原始视图,但同时,您没有一个大部分为空的列。您可以联接这两个表,也可以分别对每个表进行操作


在线搜索数据库规范化,以获取更多关于此主题的文章。

您的示例比我的要便宜得多。出于某种原因,在解释OO或规范化时,我总是求助于水果-P