多产品类型的数据库设计

4
假设我有一个包含四种不同产品类型的数据库。 每种类型都包含非常不同的字段。 第一种产品分为三类。 第二种产品分为三类。 但第三种和第四种产品没有分类。
那么,建立这个数据库结构的最佳方式是什么呢? 我应该只创建四个不同的表吗? 并且,如何在这些不同的产品中构建产品交易细节结构?
4个回答

17

您可能还想看一下更为复杂的模型。该模型接受任意数量的不同产品并为其分配属性。每个产品可以拥有任意数量的不同属性

PropertyType表格包含各种属性类型,例如 [名称] = 高度、宽度、颜色、最大速度、容积等。 Trait是描述性属性,如颜色; measurement是数值属性,如高度。

每个产品可以属于多个类别,这些类别可以是嵌套的。

product_nodel_01


如果我有一个带有主数据的属性,比如说我有一个名为“模板”的属性类型,它实际上只是一个 blob 存储(我已经有了 Measurement、Trait 和 File 表)。不幸的是,用户不能随意上传文件,而是必须从文件列表中选择。那么我需要添加一个名为 template 的表吗?总体来说,就是 Measurement、Trait、File 和 Template 四个表。 - OddDev

1

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

创建一个具有共同属性的产品表:

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));

1

你可以用几种方法来实现这个... 最简单的方法是为每个分类都设置一个字段,并允许它们为空。这将考虑到第三和第四种物品,但可能会导致在这些列中有NULL的行(这没有问题)。

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

LLBLGen 可以原生地处理这两种方法。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接