我的电子商务系统将有5种基本类型的产品:
每个人都有相关的特定属性......
我做了什么(类表继承):
Product
Id
Name
Sku
Price
...
Shoe
ProductId
Size
Color
...
Computer
ProductId
Memory
Processor
...
您对该设计有何看法?我认为这不是一个好主意,因为它会使代码变得复杂,例如:
- 系统显示页面中的所有产品
- 客户选择鞋子
- 我有ProductID并且必须检查它是手机还是电脑或鞋......
我不知道,也许我在想错...
我认为EAV根本不是一个好选择...
你们的想法是什么?
由于
答案 0 :(得分:6)
在数据库中至少有三种表示类继承的方法
这些方法中的每一种都有利有弊,这是你必须做出的权衡。
另一方面,使用继承来表示产品类型意味着每次引入新的产品类型时都必须修改代码和数据库模式。如果类型将发生很大变化并且每种类型没有太多逻辑关联,那么使用单个(producId,key,value)产品属性表可能会更好。这不是一个漂亮的数据库设计,但在这种情况下会变得更加实用。
答案 1 :(得分:1)
你的对象设计很好。
但是,我建议使用单表继承(如Adam所述)并避开EAV。如果您的RDBMS支持XML类型并且您担心存储所有可归零字段,请将所有可选数据放在单个XML列中。然后,模式验证将确保您不会尝试使用一双鞋等来存储处理器类型。
为每种产品类型添加额外字段就像更新该特定产品的架构一样简单。
答案 2 :(得分:0)
您的设计是今天的正确标准。它被称为规范化,将对象分解为更小的对象表。这是关系数据库的全部目的。我会留在你正在的道路上