可选列的一对一关系或NULL字段?

时间:2013-12-13 05:15:31

标签: mysql database database-normalization denormalization

我正在进行数据库设计,并希望存储用户地址。请考虑以下事项:很多时候,当您在网站上注册地址时,会有“地址第1行”和“地址第2行”。

由于'地址第2行'是可选的,存储它的最佳做法是什么?

您是要使用单个表并允许“地址行2”为NULL,还是要创建一对一关系的单独表?

仅供参考我使用MySQL作为我的数据库。

2 个答案:

答案 0 :(得分:0)

我同意Pieter Geerkens关于使用主表的意见。

然而,如果您的设计需要关于额外第二行的元信息,例如名称标签或第二行类型,例如“floornum”枚举,“appartmentnum”, “buildingnum”,这是使用第二张桌子的情况。

..但是否则,存储在主表中。如果你这样做,我的回答是使用NULL值。当绝对没有存储

时,这是标准默认值

答案 1 :(得分:-1)

以上都不是 - 默认为单空格的非可空字段。尽你所能,避免必须合并你的可空领域的麻烦。获得直观的布尔结果

在这种情况下,创建单独的表是错误的真正原因是地址标签只有两个地址行的空间。因此,将两个地址行存储在主表中。

在其他情况下,可能值的最大数量确实是未知的,因此单独的表(至少在理论上,可能存在实用性的最重要考虑因素)是正确的。

<强>更新: 请注意,在此示例中,所有空格的值已经是必须特殊处理的特殊值 - 通过在打印的地址标签(或其他显示介质)上省略。添加一个额外的特殊值NULL,在打印的标签上使用相同的语义和处理是不必要的。