用类似的桌子设计
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
-丹尼尔
【讨论】:
我真的不想拥有所有的空值......它也不是真正的联系信息,可能有诸如车牌或地理定位之类的东西(没关系出于讨论的目的)。以上是关于用类似的桌子设计的主要内容,如果未能解决你的问题,请参考以下文章