【问题标题】:Designing db for multiple forms of a single type为单一类型的多种形式设计数据库
【发布时间】: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 作为外键添加到家具表中,但一次只能添加一种类型。

【问题讨论】:

  • mysqlsql-server?
  • 您还需要对此进行更多扩展;给出你想要存储的具体细节,不要只给我们“关于动物的存储细节”的想法。例如,向我们展示数据不同之处的示例,以及为什么您认为它应该在不同的表格中。
  • @larnu 用一个例子更新了问题。
  • 您的问题是关系型数据库中的一个众所周知的话题,称为 SuperTypes 和 SubTypes(甚至是表继承),尝试谷歌搜索一下,您会发现大量内容。

标签: sql-server database


【解决方案1】:

如果有多个属性,一个想法是创建一个包含所有常见内容的动物表,以及一个包含动物(FK)、属性、值列的动物属性表。当然,这是一个无轴心的解决方案,它可能适合也可能不适合您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2010-11-18
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2018-02-17
    • 1970-01-01
    相关资源
    最近更新 更多