假设我有一个包含四种不同产品类型的数据库。 每种类型都包含彼此差异很大的字段。 第一类产品分为三类。 第二类产品分为三类。 但第三个和第四个,没有任何分类。
为此数据库构建结构的最佳方法是什么? 我应该制作四张不同的桌子吗? 此外,我如何使用这些不同的产品构建产品交易细节?
答案 0 :(得分:13)
您可能还想看一下更复杂的模型。此模型采用任意数量的产品,并为其指定属性。每个产品可以包含任意数量的属性。
PropertyType
表包含各种属性类型,例如[Name] = Height,Width,Color,MaxSpeed,Volume等。 Trait 是一个描述性属性像颜色; 度量是数字属性,如高度。
每个产品可以属于多个类别;类别可以嵌套。
答案 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));