表格包含3个实体,其中第1个和第2个是第3个

时间:2016-11-25 12:09:45

标签: mysql database-design normalization database-normalization

这实际上是让我在设计表格并对其进行规范化时感到困惑的事情之一。当我面临为具有子类型或“子”表的实体设计表时,如果你愿意的话。

所以我的实体是框架海报订单订单商品

考虑以下因素:

框架 is-a 产品

海报 is-a 产品

订单one-or-many 商品(s)或商品

所以,我想到了两种可能的表格设计方法。

(解决方案1)

frame_id PK
material (can be steel, plastic, wood etc)
price_per_sqft
inStock
image
desc
name

海报

poster_id PK
desc
image
inStock
price_per_sqft
name
category (can be cartoon, horses, and whatnot)

顺序

order_id PK
items_count
date_ordered
status (delivered, pending, shipped, unshipped, cancelled..)

orderitems (包含订单中的商品#可以是相框或海报)

order_id FK
frame_or_poster_id FK (this is the part im not sure of)
length
width
cost

(解决方案2)(此DROPS框架和海报表并放入产品表中)

产品

product_id PK
isPoster BIT
isFrame BIT
inStock BIT
desc
price_per_sqft
material
category
image
name

顺序

order_id PK
items_count
date_ordered
status (delivered, pending, shipped, unshipped, cancelled..)

orderitems (包含订单中的商品#可以是相框或海报)

order_id FK
product_id FK
length
width
cost

解决方案2是规范化的表格设计吗?解决方案2有一个产品表,可以存储框架海报并由product_id标识,但问题是

空值。并非海报框架都具有materialcategory属性。这意味着材料和类别可以为空。

如果我按照解决方案1,则无法在 orderitems 表下引用FKframe_id的个人poster_id。这就是为什么我把frame_or_poster_id放在上面。

最好的方法是什么?给定3个实体的最佳方法是什么,其中2个子类型为1.在这种情况下,框架海报的类型为产品

我认为解决方案1由于重复的列或属性而存在一些冗余。

我很感激任何解决方案或建议。

谢谢。

0 个答案:

没有答案