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

  • 手机
  • 计算机
  • 鞋子
  • 衬衫
  • 默认值(无特定属性)

  • 每个都有与之相关的特定属性...

    我做了什么(类表继承):
    Product 
       Id 
       Name 
       Sku 
       Price 
       ...    
     
    Shoe 
       ProductId  
       Size 
       Color 
       ... 
     
    Computer 
       ProductId 
       Memory 
       Processor 
       ... 
    

    您如何看待该设计?我认为这不是一个好主意,因为它会使我有点复杂的代码,例如:

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

    -现在,客户选择鞋子

    -我得到了ProductID,必须检查它是手机,计算机还是鞋子...

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

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

    你们怎么想?

    谢谢

    请您参考如下方法:

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

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

  • 这些方法中的每一种都有优点和缺点,这是您必须权衡的。

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


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!