Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 可选列的一对一关系或空字段?_Mysql_Database_Database Normalization_Denormalization - Fatal编程技术网

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

Mysql 可选列的一对一关系或空字段?,mysql,database,database-normalization,denormalization,Mysql,Database,Database Normalization,Denormalization,我正在进行数据库设计,并希望存储用户地址。考虑以下几点:当你用网站登记你的地址时,有“地址线1”和“地址线2”。 既然“地址行2”是可选的,那么存储它的最佳实践是什么 您是希望使用单个表并允许“地址行2”为空,还是希望创建具有一对一关系的单独表 仅供参考,在我的数据库中使用MySQL。以上都不是-默认为单个空格的不可空字段。在可能的情况下,避免合并可空字段的麻烦。要获得直观的布尔结果 在本例中,创建一个单独的表是错误的,真正原因是地址标签只能容纳两条地址行。因此,将这两个地址行存储在主表中 在其

我正在进行数据库设计,并希望存储用户地址。考虑以下几点:当你用网站登记你的地址时,有“地址线1”和“地址线2”。

既然“地址行2”是可选的,那么存储它的最佳实践是什么

您是希望使用单个表并允许“地址行2”为空,还是希望创建具有一对一关系的单独表


仅供参考,在我的数据库中使用MySQL。

以上都不是-默认为单个空格的不可空字段。在可能的情况下,避免合并可空字段的麻烦。要获得直观的布尔结果

在本例中,创建一个单独的表是错误的,真正原因是地址标签只能容纳两条地址行。因此,将这两个地址行存储在主表中

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

更新
请注意,在本例中,所有空格的值已经是一个特殊值,必须通过在打印地址标签(或其他显示介质)上省略来进行特殊处理。在打印的标签上添加具有相同语义和处理的附加特殊值NULL是浪费和不必要的。

以上任何一项-默认为单个空格的不可空字段。在可能的情况下,避免合并可空字段的麻烦。要获得直观的布尔结果

在本例中,创建一个单独的表是错误的,真正原因是地址标签只能容纳两条地址行。因此,将这两个地址行存储在主表中

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

更新
请注意,在本例中,所有空格的值已经是一个特殊值,必须通过在打印地址标签(或其他显示介质)上省略来进行特殊处理。在打印的标签上添加具有相同语义和处理的附加特殊值NULL是浪费的,没有必要。

关于使用主表,我同意Pieter Geerkens的观点

然而,如果您的设计需要关于额外的第二行的元信息,例如名称标签或第二行的类型,例如“floornum”、“appartmentnum”、“buildingnum”的枚举,则可以使用第二个表


。。但除此之外,存储在主表中。如果是,我的答案是使用
NULL
值。这是绝对不存储任何内容时的标准默认设置

关于使用主表,我同意Pieter Geerkens的观点

然而,如果您的设计需要关于额外的第二行的元信息,例如名称标签或第二行的类型,例如“floornum”、“appartmentnum”、“buildingnum”的枚举,则可以使用第二个表


。。但除此之外,存储在主表中。如果是,我的答案是使用
NULL
值。当一个可为空的字段中没有存储任何内容时,这是标准默认值。如果为每个可以为null的字段添加一个表,那么一个小型数据库将有数千个表。以上任何一个都不是-默认为单个空格的不可为null的字段。在可能的情况下,避免合并可空字段的麻烦。以获得直观的布尔结果。@juergend的答案是更被接受的方法。
null
定义的东西之一是“无值”,这里就是这种情况。空值的存在是有原因的;这就是其中之一。我会使用单个表,并将地址2设置为空,以便一直维护。不需要仅仅为了查询而连接表result@EdGibbs:虽然这是一种常见的做法,但我认为NULL的更好语义是“可能有价值,但还不知道”。它减少了对合并操作重复键入的需要。如果为每个可以为null的字段添加一个表,那么一个小型数据库将有数千个表。以上任何一个都不是-默认为单个空格的不可为null的字段。在可能的情况下,避免合并可空字段的麻烦。以获得直观的布尔结果。@juergend的答案是更被接受的方法。
null
定义的东西之一是“无值”,这里就是这种情况。空值的存在是有原因的;这就是其中之一。我会使用单个表,并将地址2设置为空,以便一直维护。不需要仅仅为了查询而连接表result@EdGibbs:虽然这是一种常见的做法,但我认为NULL更好的语义是“可能有价值,但还不知道”。我认为您误解了我的问题,它减少了对合并操作重复键入的需要。用户到地址确实是一对多,但我关心的是地址的结构。例如,第1行通常是街道和房屋号,而第2行是可选的,但如果有公寓号,则可以用于公寓号等内容。@Tomspace:现在,地址行的显示代码必须测试该行是否为空,以及是否为所有空格;或者不断地将空值合并到一个空间,以便执行简单的比较。为什么要把一项简单的任务变得更复杂?我相信你误解了我的问题。用户到地址确实是一对多,但我关心的是地址的结构。例如,第1行通常是街道和房屋号,而第2行是可选的,但如果有公寓号,则可以用于公寓号等内容。@Tomspace:现在,地址行的显示代码必须测试该行是否为空,以及是否为所有空格;或常数