表 order_detail:
order_no | product_id
表 product_detail:
prod_id | prod_name | prod_size | prod_type
order_detail .product_id references to product_detail.prod_id
我听说数据冗余是个坏主意,所以我内部连接了表格以显示完整的订单详细信息。但是问题在于product_detail
中的数据可以由admin编辑或删除,这意味着当我内部联接表时,它可能返回null
。我是否应该在{size:23,type:MZ}
中存储类似JSON的示例:order_detail
,以避免数据“丢失”?
答案 0 :(得分:0)
您将需要分解表结构。
必须在order_detail
表中以JSON格式存储数据,这会损害数据库上的normalization(这是不希望的)。
将产品属性设为单个实体。
id |名称| some_other_descriptive_columns | Deleted_at
id |输入
id |大小
id | product_id | product_type_id | Deleted_at
id | product_id | product_size_id | Deleted_at
您可能已经注意到,我们还有一个名为deleted_at
的列,其数据类型将为timestamp
,并且在上面显示的所有表中默认为nullable
当管理员编辑(也可以删除某些尺寸或类型)或删除产品时,我们要做的就是在deleted_at
列中输入时间戳。换句话说,我们进行了软删除。
因此,当管理员对产品数据集进行操作时,请提取其deleted_at
列为NULL的所有详细信息。在进行内部联接以获取订单详细信息时,即使管理员在下订单后几天后删除了产品,也不会阻止丢失任何数据的过程,因为我们将获取所有详细信息,无论我们在{ {1}}列。
答案 1 :(得分:0)