这实际上是让我在设计表格并对其进行规范化时感到困惑的事情之一。当我面临为具有子类型或“子”表的实体设计表时,如果你愿意的话。
所以我的实体是框架,海报,订单,订单商品。
考虑以下因素:
框架 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
标识,但问题是
空值。并非海报和框架都具有material
或category
属性。这意味着材料和类别可以为空。
如果我按照解决方案1,则无法在 orderitems 表下引用FK
和frame_id
的个人poster_id
。这就是为什么我把frame_or_poster_id
放在上面。
最好的方法是什么?给定3个实体的最佳方法是什么,其中2个子类型为1.在这种情况下,框架和海报的类型为产品
我认为解决方案1由于重复的列或属性而存在一些冗余。
我很感激任何解决方案或建议。
谢谢。