【发布时间】:2018-05-17 08:32:24
【问题描述】:
为具有多种形式的类型设计数据库表的最佳方法是什么。 例如,Animal 可以是具有特定属性的任何动物。
一个动物表,每个类型都有公共列和单独的表。但是如何维护主动物表中的外键引用呢?我们不能为每种类型保留一个键,如果类型增长,引用也会增长。并且对于一行只存在一种类型,而动物表中的所有其他键都将为空。
除了这种方式之外,还有其他设计表格的最佳方式吗? 例如考虑下表 家具桌:
Id FurnituretypeId NoofLegs ChairId TableId
-------------------------------------------------
int int int int int
椅子桌:
Id Name CansSwing CanDetachable
-------------------------------------------------
int Varchar(25) boolean boolean
婴儿床:
Id Name CotType Storage StorageType
-------------------------------------------------
int Varchar(35) Varchar(25) boolean Varchar(25)
考虑到上面的例子,如果我必须插入一把椅子,那么家具表中的 TableId 将为空。如果有多种类型的家具,那么我必须将这些类型 ID 作为外键添加到家具表中,但一次只能添加一种类型。
【问题讨论】:
-
mysql或sql-server? -
您还需要对此进行更多扩展;给出你想要存储的具体细节,不要只给我们“关于动物的存储细节”的想法。例如,向我们展示数据不同之处的示例,以及为什么您认为它应该在不同的表格中。
-
@larnu 用一个例子更新了问题。
-
您的问题是关系型数据库中的一个众所周知的话题,称为 SuperTypes 和 SubTypes(甚至是表继承),尝试谷歌搜索一下,您会发现大量内容。
标签: sql-server database