数据库设计策略:电子商务系统上的产品表(EAV,类表继承或具体表继承)

Pau*_*aul 1 database-design e-commerce

我的电子商务系统将有5种基本类型的产品:

  1. 手机
  2. 电脑
  3. 衬衫
  4. 默认(无特定属性)

每个人都有相关的特定属性......

我做了什么(类表继承):

Product
   Id
   Name
   Sku
   Price
   ...   

Shoe
   ProductId 
   Size
   Color
   ...

Computer
   ProductId
   Memory
   Processor
   ...
Run Code Online (Sandbox Code Playgroud)

你对这个设计有什么看法?我认为这不是一个好主意,因为它会使代码变得复杂,例如:

- 系统显示页面中的所有产品

- 现在客户选择鞋子

- 我有ProductID,必须检查它是手机还是电脑或鞋......

我不知道,也许我在想错...

而且我认为EAV根本不是一个好选择......

你们觉得怎么样?

谢谢

Ada*_*tek 6

在数据库中至少有三种表示类继承的方法

  • 单表继承:整个继承树中的所有属性都存储在单个表中,并且有一个专用列描述行的类型.这意味着将有许多未使用的列,因此只有当子类共享大多数属性时,此方法才有意义.
  • 类表继承:树中的每个类都保存在一个单独的数据库表中,该表仅存储特定于该类的属性.这意味着,为了获取对象,您必须在表示继承树中的祖先的表中进行连接.
  • 具体表继承:每个具体类都有一个单独的数据库表,但存储了给定类所需的所有属性,包括继承的属性.这意味着您不必加入,但另一方面您无法升级(例如,当您查询产品时,您将看不到任何鞋子).

这些方法中的每一种都有利有弊,这是你必须做出的权衡.

另一方面,使用继承来表示产品类型意味着每次引入新产品类型时都必须修改代码和数据库模式.如果类型将发生很大变化并且每种类型没有太多逻辑关联,那么使用单个(producId,key,value)产品属性表可能会更好.它不是一个漂亮的数据库设计,但在这种情况下会更加实用.