如何设计具有不同类型产品的数据库

时间:2018-09-05 05:19:27

标签: database-design relational-database

我有一家商店,目前销售三种不同类型的物品:视频游戏,游戏机和电缆。我试图弄清楚如何设计这三个项目要使用的单个表。

我当时在想每种类型都具有以下属性:

Video Game
- name
- console

Console
- name

Cable
- name

我想到了这个设计:

Product
- Type
- Name
- Console

因此它将转化为类似的内容:

id | type    | name          | console
---+---------+---------------+---------
 1 | game    | Goldeneye     | N64
 2 | console | SNES          | null
 3 | cable   | HDMI          | null
 4 | game    | Smash Bros    | Wii

但是对于consolecable类型的产品,控制台列始终为空。此外,我认为如果我决定出售另一种需要另一栏的产品(例如,电视监视器并包括屏幕尺寸),这种设计可能会受到很大限制。

有没有更好的方法来设计桌子?

我环顾四周,这种解决方案似乎很理想:https://stackoverflow.com/a/20793237/1054937。我将创建一个引用属性表的通用产品表。在这种情况下,数据库将无法强制执行A​​ttirbutes(即,所有游戏都必须具有console属性)。

2 个答案:

答案 0 :(得分:1)

您可以轻松拥有两个表

<div class="wc-deposits-wrapper wc-deposits-optional">
  <ul class="wc-deposits-option">
    <li>
      <input type="radio" name="wc_deposit_option" value="yes" id="wc-option-pay-deposit">
        <label for="wc-option-pay-deposit">
Option 1</label>
    </li>
    <li>
      <input type="radio" name="wc_deposit_option" value="no" id="wc-option-pay-full" checked="checked">
        <label for="wc-option-pay-full">
Option 2</label> 
    </li>
   </ul>
</div>

表结构可能是这样

1. Product
2. Attributes

让我知道这是否可以解决您的问题

答案 1 :(得分:1)

您需要的是与Products表的多态关联。

具有一个通用的Product表,该表将具有item_type和item_id:

id | item_type      | item_id
 1 | VideoGame      | 1
 2 | Console        | 1  
 3 | Cable          | 1  
 4 | VideoGame      | 2

VideoGames表:

id | name          | price
 1 | Goldeneye     |  59
 2 | FIFA19        |  88

控制台表:

id | name          | price
 1 | SNES          |  200
 2 | WhateverName  |  300

电缆表

id | name          | price
 1 | HDMI          |  20
 2 | CAT6          |  30

现在“产品”表中提供了每种产品,您可以借助item_iditem_type来获得确切的产品。

id = 4的产品实际上是一款名为FIFA19的视频游戏,可以在Consoles表中找到它的所有相应详细信息,例如价格为88。

因此,基本上,您只需要根据商品的类型和ID在产品表中查询商品,就可以找到该记录。

希望这会有所帮助:)