Database design 多产品类型的数据库设计

Database design 多产品类型的数据库设计,database-design,Database Design,假设我有一个包含四种不同产品类型的数据库。 每种类型都包含彼此差异很大的字段。 第一类产品分为三类。 第二类产品分为三类。 但是第三个和第四个,没有任何分类 构建此数据库结构的最佳方法是什么? 我应该做四张不同的桌子吗? 另外,我如何用这些不同的产品构造产品交易细节?首先,这取决于您的类型是否相互依赖,以及您是否存储了与类型相关的信息。 但是您肯定应该使用单个产品表。有几种方法可以做到这一点。。。最简单的方法是只为每个分类设置一个字段,并允许它们为空。这将解释第三和第四种类型的项,但可能会导致这

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

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

首先,这取决于您的类型是否相互依赖,以及您是否存储了与类型相关的信息。

但是您肯定应该使用单个产品表。

有几种方法可以做到这一点。。。最简单的方法是只为每个分类设置一个字段,并允许它们为空。这将解释第三和第四种类型的项,但可能会导致这些列中的行具有空值(这没什么错)

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


以本机方式处理这两种方法。

实现这一点的方法不止一种,但最直接的方法是:

创建具有公共属性的产品表:

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

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

PropertyType
表包含各种属性类型,如[名称]=高度、宽度、颜色、最大速度、体积等。Trait是一种描述性属性,如颜色测量值是一个数字属性,与高度类似

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


如果我有一个包含主数据的属性,我将如何扩展此模式?比如说我有一个叫做“模板”的属性类型。实际上,它只是一个blob存储(我已经有了度量、特征和文件表)。不幸的是,人们不能放入任何文件,只能从文件列表中进行选择。我必须添加表格模板吗?总体测量、特征、文件和模板。