Database design 投影数据库的最佳方法

Database design 投影数据库的最佳方法,database-design,oracle11g,Database Design,Oracle11g,我拿到了产品清单。现在有四种产品。未来仍有可能出现另一种产品。每种产品类型都有公共字段,但也有唯一字段,这些字段仅在此类型中存在。例如 PRODUCT_1 A varchar - common column B varchar - common column C int - unique for this type D int - unique for this type PRODUCT_2 A varchar - common column B varchar - common column

我拿到了产品清单。现在有四种产品。未来仍有可能出现另一种产品。每种产品类型都有公共字段,但也有唯一字段,这些字段仅在此类型中存在。例如

PRODUCT_1
A varchar - common column
B varchar - common column
C int - unique for this type
D int - unique for this type

PRODUCT_2
A varchar - common column
B varchar - common column
E double -  unique for this type
F varchar - unique for this type
我想创建一个包含所有产品类型元数据的表PRODUCT

PRODUCT
ProdId int - PK
ProdType - int
A varchar
B varchar
和第二个名为PRODUCT_EXTENSION的表,该表将定义其余的products字段:

PRODUCT_EXTENSION
ProdExtId - PK
ProdId - FK
FieldName varchar
FieldValue varchar
这是创建这种结构的好方法吗?我有点害怕SELECTS语句的性能。甚至不知道如何创建SELECT,它将返回包含列的行:

SELECT A, B, C, F
也许我应该为每种产品创建单独的表

TABLE PRODUCT_1
TABLE PRODUCT_2

请给出更好的建议,或者可能还有其他方法?

这取决于您所寻找的:

  • 如果要动态添加产品定义,则建议的第一个结构可以工作。缺点是您将失去使用索引和数据库优化的能力,因为您将表结构从数据库中抽象出来,例如,产品列成为数据库的表行
  • 如果您的产品定义良好且受到限制,那么您可以拥有一个包含所有公共列的主产品表,以及包含特定产品列的每个产品的相关表。现在,缺点是在不重写DB模式的情况下无法添加新产品