1
2
一些纯粹主义者会建议第三条路应该走。事实上,使用这种方法,理论上可以构建一个单表数据库! 然而,正如gbn所提到的,这将导致特定格式的问题,并且您只需要在客户机上强制执行数据长度等。 我同意你的第二个建议,使用不同表格的方法,地址类型、电话号码类型等与下面所示类似。 身份证号码 addrss_类型varchar(主页/联系人/邮件等) 加法器\u line1 varchar 加法器-2 varchar 等 |
2
3
每个实体一个表行是正确的。所以一个用于电子邮件,一个用于电话号码等是正确的。这不是过度杀戮:这是规范化的数据库设计。 您的选项3可以完成,但是,比方说,如果您想对电话号码和电子邮件地址强制执行某种模式,该怎么办? |
3
3
有些人可能会说方法3是最好的。其他人会说,它基本上是数据库中最常见的反模式之一,即 EAV 这让人非常讨厌。 至于我,我对你的申请知之甚少,无法提出解决方案。通常-方法2为您提供了最多的功能。 还有方法4,它是变体-方法5: 4-使用值数组-即,电话列不是文本数据库,而是文本[],然后您可以在其中存储许多电话。 5-既然你在PostgreSQL上-使用它。contrib中有相当酷的hstore数据类型,您可以使用它来代替数组来添加一些语义(比如电话类型)。 |
4
2
缺点:
|
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |