【发布时间】:2011-04-10 20:43:20
【问题描述】:
假设我们有一个名为 Widget 的对象,我们可以为它构造一个数据库表。
现在,假设我们有 两组 额外的细节来描述小部件。每组数据都可以在单独的时间获得。因此,假设我们的小部件的生命周期分为三个阶段......
在第 1 阶段,我们只需要一个带有名称和描述的小部件。
widgets
-------
id (PK)
name
description
在第 2 阶段,我们的小部件增加了高度和重量。
widgets
-------
id (PK)
name
description
height
weight
在第 3 阶段,我们的小部件获得目的地和运费。
widgets
-------
id (PK)
name
description
height
weight
destination
shipping_cost
上述模式(用于“阶段 3”)意味着处于阶段 1 或阶段 2 的小部件的数据库记录将具有 null 值。
或者,我们可以构造一个永远不会有空值的模式(但父记录可能有零个、一个或两个子记录,具体取决于小部件生命周期的当前阶段):
widgets
-------
id (PK)
name
description
widget_specs
-------
id (PK)
widget_id (FK)
height
weight
widget_delivery
-------
id (PK)
widget_id (FK)
destination
shipping_cost
这些选择之一总是正确的吗?每个人都有合理的利弊吗?如果答案取决于更多变量,它们是什么?在什么条件下,一种替代方案会成为明显的首选?
接受的答案将引用该主题的现代权威来源。
编辑:我觉得这很容易引起争论,但它也是一个应该有正当利弊的话题,因此是一个权威的答案。这个问题只是一个困扰我的问题,因为我已经看到它在没有理由或考虑替代方案的情况下以两种方式完成。根据当前引领潮流的 DBA 类型,我只想知道哪个正确。
【问题讨论】:
-
只是一个观察,我打算回应“接受的答案将引用该主题的现代权威来源”这一行。真的让我失望。这是一个同伴帮助论坛,不是有偿工作,这个规定似乎对寻求免费帮助的人要求过高。当然,这只是我的看法,但我很想知道其他人是否也对此感到厌烦。
-
@Serapth +1,只是因为我是权威的,但不是很现代:)
标签: language-agnostic database-design schema relational-database schema-design