多种产品类型的数据库设计

时间:2010-01-12 16:23:18

标签: database-design

假设我有一个包含四种不同产品类型的数据库。 每种类型都包含彼此差异很大的字段。 第一类产品分为三类。 第二类产品分为三类。 但第三个和第四个,没有任何分类。

为此数据库构建结构的最佳方法是什么? 我应该制作四张不同的桌子吗? 此外,我如何使用这些不同的产品构建产品交易细节?

4 个答案:

答案 0 :(得分:13)

您可能还想看一下更复杂的模型。此模型采用任意数量的产品,并为其指定属性。每个产品可以包含任意数量的属性

PropertyType表包含各种属性类型,例如[Name] = Height,Width,Color,MaxSpeed,Volume等。 Trait 是一个描述性属性像颜色; 度量是数字属性,如高度。

每个产品可以属于多个类别;类别可以嵌套。

product_nodel_01

答案 1 :(得分:0)

首先,它取决于您的管子是否相互依赖,以及您是否存储与类型相关的信息 但您肯定应该使用单一产品表。

答案 2 :(得分:0)

有几种方法可以做到这一点......最简单的方法是为每个分类设置一个字段,并允许它们为NULL。这将考虑第三种和第四种类型的项目,但可能导致在这些列中具有NULL的行(没有错误。)

更难的方法是使用类似继承的结构。在这里,您有一个存储所有常见属性的基表。然后,对于链接到基表的每种类型的对象都有“子表”,并存储这些类型对象的属性。要获取完整的属性列表,可以在视图中将父表和子表连接在一起。如果您知道要查找的对象类型,则只需链接相应的子表即可。如果要一起查看产品,那么您将所有子表LEFT JOIN加在一起,但这仍然会导致视图中需要将NULL解释为此类型或类型的行。

LLBLGen 本地处理这两种方法。

答案 3 :(得分:0)

有多种方法可以做到这一点,但最直接的方法是:

使用公共属性创建产品表:

Product
-------------
PRODUCT_ID    NUMBER  (PK - This is what you'll foreign key against in other tables)
PRODUCT_NAME  VARCHAR(n)
PRODUCT_DESC  VARCHAR(n)
PRODUCT_TYPE  NUMBER  (FK into PRODUCT_TYPES)

Product_Types
-------------
PRODUCT_TYPE  NUMBER     (PK)
DESCRIPTION   VARCHAR(n)

为每种产品类型匹配创建类似的内容 自定义字段到该类产品所需的列。

Car_Products
-------------
PRODUCT_ID     NUMBER (PK, FK - to Product)
NUM_DOORS      NUMBER
NUM_CYLINDERS  NUMBER
MPG            NUMBER
... CUSTOM FIELDS ...

然后,您可以为不同的产品类型创建视图以获取所需的所有信息

Cars
-------------
CREATE VIEW Cars AS (SELECT * FROM Car_Products cp JOIN Products p ON (cp.product_id = p.product_id));