gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:12:47 26 4
gpt4 key购买 nike

我的电子商务系统将有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头(例如,当您查询产品时,您不会看到任何鞋子)。

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

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

    关于database-design - 数据库设计策略:电子商务系统上的产品表(EAV,类表继承或具体表继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056524/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com