Fırat Kaya Asked: 2020-11-26 10:21:45 +0800 CST2020-11-26 10:21:45 +0800 CST 2020-11-26 10:21:45 +0800 CST 如何设计不同类型的地址表? 772 我有一个地址表和不同的地址类型,如个人和公司。我设计了一个表格,但我认为这违反了规范化规则。我该如何改进这个设计? 我的设计: mysql database-design 1 个回答 Voted Best Answer J.D. 2020-11-26T10:52:38+08:002020-11-26T10:52:38+08:00 您的设计总体上看起来相当不错,但我会提出以下建议: 您已经将客户的名字和姓氏存储在clients表中,因此您可以client_address_personal_info完全删除该表。这将减少冗余数据并提高性能并简化管理和报告。 您可能可以将表的名称标准化为client_address_corporate_info与您的clients表类似的名称,例如corporations 与第一点类似,您应该从表或表中删除phone_number字段,使其仅存储在一个位置。(您选择要将其保留在哪个表中,我已经看到它以两种方式完成。)clientsclient_addresses 另一项一般性建议(尽管这与规范化相关)是您应该将 varchar 字段的大小调整为能够拟合所有潜在未来值的大小。虽然显然我们无法预测未来,但我的观点通常是为逻辑上可能的更大值留出足够的空间。VARCHAR(1) 与 VARCHAR(1000) 不会影响性能或磁盘空间是任何明显不同的方式。因此,虽然大多数名字或企业名称都可以放入 VARCHAR(16) 字段中,但我确信那里的名字长度超过 25 个字符。我对此类事情的一般出发点是 VARCHAR(50)(只有在极少数情况下,我才使用较小的 VARCHAR)。
您的设计总体上看起来相当不错,但我会提出以下建议:
clients
表中,因此您可以client_address_personal_info
完全删除该表。这将减少冗余数据并提高性能并简化管理和报告。client_address_corporate_info
与您的clients
表类似的名称,例如corporations
phone_number
字段,使其仅存储在一个位置。(您选择要将其保留在哪个表中,我已经看到它以两种方式完成。)clients
client_addresses