我有一家商店,目前销售三种不同类型的物品:视频游戏,游戏机和电缆。我试图弄清楚如何设计这三个项目要使用的单个表。
我当时在想每种类型都具有以下属性:
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
但是对于console
和cable
类型的产品,控制台列始终为空。此外,我认为如果我决定出售另一种需要另一栏的产品(例如,电视监视器并包括屏幕尺寸),这种设计可能会受到很大限制。
有没有更好的方法来设计桌子?
我环顾四周,这种解决方案似乎很理想:https://stackoverflow.com/a/20793237/1054937。我将创建一个引用属性表的通用产品表。在这种情况下,数据库将无法强制执行Attirbutes(即,所有游戏都必须具有console属性)。
答案 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_id
和item_type
来获得确切的产品。
id = 4的产品实际上是一款名为FIFA19
的视频游戏,可以在Consoles
表中找到它的所有相应详细信息,例如价格为88。
因此,基本上,您只需要根据商品的类型和ID在产品表中查询商品,就可以找到该记录。
希望这会有所帮助:)