Soma Juice Asked: 2024-02-01 05:12:57 +0800 CST2024-02-01 05:12:57 +0800 CST 2024-02-01 05:12:57 +0800 CST 3NF标准化表设计 772 我正在努力解决如何标准化有多个地址的数据库。用户。 情况是用户可以同时拥有常规地址和送货地址。当用户下订单时,其中一个地址应连接到该订单。 我正在尝试实现 3NF 标准化。因此,我将把地址存储在连接表中,我应该向 user_addresses 表添加主键并在订单表的 fk_address_id 列中使用它吗?或者这会破坏 3NF 吗? 我基本上想做的是使使用不同地址下订单成为可能。 mysql 2 个回答 Voted Best Answer Bill Karwin 2024-02-01T05:47:49+08:002024-02-01T05:47:49+08:00 考虑以下几点: 是否可以使用不是与用户关联的地址之一的自定义地址下订单?例如,当用户订购节日礼物并要求将其直接运送给礼物接收者时。如果是这样,则不要引用该user_addresses表。这会将运送目的地限制为与用户关联的目的地。 下单后可以更改地址记录吗?您是否需要订单当时发货地点的记录?如果是这样,那么您需要存储地址详细信息的副本,以保留该日期的地址。这可能看起来与 3NF 冲突,但它存储了不同的事实 - 特定时间的地址值,即使它随后被更新。 Rick James 2024-02-01T07:41:44+08:002024-02-01T07:41:44+08:00 摆脱 user_addresses;相反,地址表中有一个address_type (varchar)。这也摆脱了过度规范化的“address_types”表。 Address_types 可能是“账单”、“邮件”、“礼物”(很多)。让 UI 询问帐单地址是否与邮寄地址相同,从而避免用户烦恼。 正如比尔指出的,“运送至”属于订单,而不是用户。(同时,可以点击链接 user <-> order <-> Ship_to 我不会费心去重复你和你伴侣的地址。 教授要求你使用 3NF 吗?如果是这样,我帮不了你。
考虑以下几点:
是否可以使用不是与用户关联的地址之一的自定义地址下订单?例如,当用户订购节日礼物并要求将其直接运送给礼物接收者时。如果是这样,则不要引用该
user_addresses
表。这会将运送目的地限制为与用户关联的目的地。下单后可以更改地址记录吗?您是否需要订单当时发货地点的记录?如果是这样,那么您需要存储地址详细信息的副本,以保留该日期的地址。这可能看起来与 3NF 冲突,但它存储了不同的事实 - 特定时间的地址值,即使它随后被更新。
摆脱 user_addresses;相反,地址表中有一个address_type (varchar)。这也摆脱了过度规范化的“address_types”表。
Address_types 可能是“账单”、“邮件”、“礼物”(很多)。让 UI 询问帐单地址是否与邮寄地址相同,从而避免用户烦恼。
正如比尔指出的,“运送至”属于订单,而不是用户。(同时,可以点击链接 user <-> order <-> Ship_to
我不会费心去重复你和你伴侣的地址。
教授要求你使用 3NF 吗?如果是这样,我帮不了你。