关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
11个月前关门了。
改进这个问题
这可能是一个基本的问题,但我很好奇用联合类型设计数据库最合理的“首选”方法是什么。
我的意思是考虑一张table Post
只有一个附加内容,附加内容可以是 video
, audio
, pdf
, text
或者别的什么。规范化的方法是为每种内容类型创建一个表。但是需要有一个连接表来查询所有其他表 type
指示内容类型的字段。
这意味着在查询初始表时需要查询其中的每一个表。
处理这个问题的另一种方法是使用厨房Flume content
带有类型字段的表。
我这么问是因为我对数据库设计不是特别精通。我很好奇这种数据结构的正常模式是什么。
1条答案
按热度按时间zfciruhq1#
这种“其中之一”的建模很棘手。有些数据库内置了对这种功能的支持,比如继承。
一种方法是有一个
attachments
表,并将所有表合并到一个表中。这将包含以下列:attachments_id
type check type in ('video', 'audio', . . .)
其中任何一个都需要列。更常见的情况是,每一个都是一个单独的实体,因为描述它们的列会有很大的不同,而且通常有自己的关系。在这种情况下,对于少数类型的简单方法是每个类型有一个单独的列,同时还有一个至多一个不存在的约束
NULL
:这允许正确声明外键关系。
另一种方法是对此的一种变体。假设所有id列的类型相同,则使用以下列:
类型将决定
id
,但数据库不会对此进行验证。另一种方法是更复杂的继承模式,它涉及为每个实体设置单独的表,以及每个实体中的类型。然后建立一个
attachments
table。这看起来像:然后:
其他table也是如此。这将设置与的外键关系
attachments
确保类型匹配。