猿问

将可选(空)和必需(非空)数据保留在同一表或单独的表中?

我在产品交付表单中有两组输入 -


收件人信息(必填)) - (country, state, city, zipcode, street, contact_no)

alternate_recipient_information(可选)) - (country, state, city, zipcode, street, recipient name, contact_no)

我需要一个高效灵活的数据库模式,以下是我认为可能适合我的模式:


user

id, name, email


country

id, country, iso_code


state

id, state, country_id


city

id, city, state_id


address_type

id, type

1   required

2   optional


address

id, street(null), city_id(null), state_id(null), country_id(null), type_id


recipient

id, user_id, address_id, contact_no


alternate_recipient

id, name, address_id, contact_no


delivery_info

id, recipient_id, alt_recipient_id(null)


或者我应该只对必需和可选的数据集使用两个单独的表,还是我可以使用?有没有更好的解决方案?


小唯快跑啊
浏览 135回答 2
2回答

慕标琳琳

在谈到效率时,通过拆分表,您必须连接表才能获得相关数据,这比具有您不必担心的具有 NULL 值的单个表效率更低。如果您稍后要提取数据,只需使用 IFNULL 并为其赋值即可。

慕仙森

制作两个单独的表将帮助您使结构更加规范化,但是您有基本的用户配置文件,因此您可以继续使用当前结构本身。
随时随地看视频慕课网APP
我要回答