【发布时间】:2019-03-27 08:52:37
【问题描述】:
表格order_detail:
order_no | product_id
表product_detail:
prod_id |产品名称 |产品尺寸 | prod_type
order_detail .product_id references to product_detail.prod_id
我听说数据冗余是个坏主意,所以我内部连接表以显示完整的订单详细信息。但是问题是product_detail里面的数据可以被管理员编辑或删除,这意味着当我内部加入表时,它可能会返回null。我是否应该在order_detail 中存储类似 JSON 示例:{size:23,type:MZ} 以避免数据“丢失”?
【问题讨论】:
-
在
order_detail上使用LEFT JOIN -
看起来管理员做得不好。
-
您应该确保数据库不允许部分删除数据,或修改影响其他部分的数据。如果您下订单并且有人更改了产品,那么这会更改引用数据的每个订单,这可能并不好。减少冗余不能以牺牲数据完整性为代价。
-
如果您的
admin(只是您的程序 IMO 的用户)可以删除产品详细信息,即使该产品有/有订单,那么您的业务逻辑 (BL) 有问题.那个BL做数据loss。 IMO,您应该与您的团队讨论尽快更改它。 -
关于“我听说数据冗余是个坏主意”:“数据冗余”没有什么特别的含义。不要担心谣言,教育自己。是时候阅读已出版的关于信息建模、关系模型和数据库设计的学术教科书了。 (记录和使用设计的语言和工具手册不是这样的教科书。)(维基文章或网络帖子也不是。)数十种已出版的学术信息建模和数据库设计教科书以 pdf 格式在线免费提供。 stanford.edu 有免费的在线课程。 (但在 SO 之外寻求资源是题外话。)
标签: mysql sql database-design