用类似的桌子设计

Posted

技术标签:

【中文标题】用类似的桌子设计【英文标题】:design with similar tables 【发布时间】:2010-12-04 00:53:07 【问题描述】:

我正在建立一个代表不同类型内容的数据库。我有一个链接(将其视为一个 URL),它可以随着时间的推移指向不同类型的数据,例如电话号码、电子邮件地址或网页。

我想我会制作这样的表格:

内容电话 content_email content_url

然后我还有一个需要指向特定类型内容的链接表。

链接可以指向的内容随时间而变化(时间 X 指向 URL 时间 X + 1 指向电话号码,等等...)

内容类型没有共同的字段,我不希望它们会出现(不确定这是否会有所不同)。

我一直在寻找一种将链接和内容类型挂钩的好方法。

编辑:

内容类型有大量不相关的表格。有些表可能有 10 个字段。

【问题讨论】:

【参考方案1】:

创建一个具有来自其他内容表的键的父表(例如,称为“内容”)。这样,您始终可以在其他地方引用该表,而不是几种不同的可能性。这避免了需要可为空的列。示例:

http://consultingblogs.emc.com/davidportas/archive/2007/01/08/Distributed-Keys-and-Disjoint-Subtypes.aspx

【讨论】:

【参考方案2】:

当实体之间存在一些公共字段时,通常建议使用超类型/子类型,但在您的示例中它可能还是有用的。

以下是几个类似问题的示例:

example 1 example 2 example 3 example 4

【讨论】:

【参考方案3】:

您似乎想在其中有一个修订字段

create table contact
   person_id
   phone ..
   email ..
   url ..
   updated_at
)

那么你就可以像这样从桌子上拉出来

SELECT * FROM person JOIN contact ON ( person.id = contact.person_id ) ORDER BY contact.updated_at DESC LIMIT 1

-丹尼尔

【讨论】:

我真的不想拥有所有的空值......它也不是真正的联系信息,可能有诸如车牌或地理定位之类的东西(没关系出于讨论的目的)。

以上是关于用类似的桌子设计的主要内容,如果未能解决你的问题,请参考以下文章

如何设计这样的桌子

测试面试题集-生活物品测试:杯子伞钢笔桌子

对桌子设计感到困惑。如何存储多个数据

简单Elixir游戏服设计- 丰富桌子进程

#yyds干货盘点#设计模式之工厂模式

多语言设计数据库。对外键的双重唯一键引用