假设我们有一个名为 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 中的小部件的数据库记录将具有空值。
或者,我们可以构造一个永远不会有空值的模式(但父记录可能有零个、一个或两个子记录,具体取决于小部件生命周期的当前阶段):
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 类型,我只想知道哪个是正确的。