产品属性集是否应视为存储为数组的列?

问题描述 投票:0回答:1

据说我有一个产品表:

身份证 产品名称
1 牛仔裤衬衫
2 馅饼

除了具有以下选项的产品变体:

id 产品_id 名字
1 1 颜色
2 2 味道

所以,我想存储一组属性

  • 牛仔裤衬衫:生产日期、材质、图案设计、款式、产地、季节(秋、夏、春、冬)

  • 馅饼:建议年龄、成分、食物类型、口味、生产日期、失效日期)

有了这一切,我想出了:

  1. 我将一组属性存储为列,它将是一个数组:
身份证 产品名称 属性集
1 牛仔裤衬衫 [生产日期、材质、...]
2 馅饼 [建议年龄、成分、食物类型、...]
  1. 我将一个单独的表拆分为一个链接到具有 1-N 关系的表产品:
身份证 产品_id 属性名称
1 1 生产日期
2 1 材质
.. ... ....
11 2 建议年龄
12 1 成分

我打算带来的所有设置属性都是默认值,这意味着所有属性都基于产品,管理员不能对其进行 CRUD 吗? 所以我想知道电商数据库设计时什么样的情况才合理?

e-commerce
1个回答
0
投票

您需要考虑打算如何存储这些值。如果解决方案 1 中的那些数组实际上是文本值(varchar 等),那么请再考虑一下。您可能需要统计数据并轻松搜索各个项目,因此您需要遵守 1NF 并避免字段包含多个元素。

当然,一些 RDBMS 系统允许数组类型,这是一种替代方案(示例:https://www.postgresql.org/docs/current/arrays.html),但你很容易遇到麻烦元素的数量,或者如果这些元素不仅仅是您存储在数组中的值,则需要详细说明这些元素,并且您将在语义上相同但技术上不同的值方面遇到很多麻烦,例如制造日期制造日期。因此,在单独的表中为属性预定义可能的值是有意义的,并且值的所有使用都将通过它们的 id 完成,因此您将把属性名称存储在一个位置,并且更改这些值将是微不足道的,没有危险由于冗余而导致不一致。如果您最终需要它,您还将难以在不同类型的 RDBMS 之间迁移数组值,或者在同一 RDBMS 的旧版本中使用数组。

因此,出于理论和实践原因,您可以选择以下设置:

属性 |身份证 |名称 | | -------- | -------- | | 1 |生产日期| | 2 |材质|

产品属性 |身份证 |产品 ID |属性ID | | -------- | -------- | -------- | | 1 | 1| 1 | | 2 | 1|2| | ..| ...| ....| | 11 | 11 2| 3 | | 12 | 12 1|4|

© www.soinside.com 2019 - 2024. All rights reserved.