这是我多年来在多个地方见过的场景;我想知道是否有其他人遇到了比我更好的解决方案...设计一个'订单'模式,其中有不同的产品定义表
我的公司销售的产品相对较少,但是我们销售的产品是高度专业化的(即为了选择给定的产品,必须提供相当多的细节)。问题在于虽然选择给定产品所需的细节数量是相对恒定的,但细节所需的细节在产品之间差异很大。例如:
产品X可能会识别像(假设)
- '颜色',
- '材质'
- '平均无故障时间'
但产品特点Y可能有特征
- “厚度”,
- 创造,利用两个产品X和Y产品的订单系统“直径”
- “电源”
的问题(他们中的一个,反正)是一个令线路在某些时候必须提及“销售”。由于产品X和产品Y被定义在两个不同的表格中 - 并且使用宽表格方案对产品进行非规范化不是一种选择(产品定义非常深入) - 很难看到明确的方式来定义此类订单行订单输入,编辑和报告是实用的方式。
事情我已经试过在过去
- 创建一个名为“产品”与产品X和Y产品共同列的父表,然后使用“产品”作为参考OrderLine表,并创建与'产品'的FK关系作为产品X和产品Y的表之间的主要方面。这基本上将'产品'表放置为OrderLine和所有不同产品表(例如产品X和Y)。它对订单输入工作正常,但会导致订单报告或编辑出现问题,因为'产品'记录必须跟踪它的产品类型,以便确定如何将'产品'加入其更详细的子产品X或产品Y. 优点:保留关键关系。 缺点:报告,在订单行/产品级别进行编辑。
- 在订单行级别创建“产品类型”和“产品密钥”列,然后使用一些CASE逻辑或视图来确定行参考的定制产品。这与项目(1)类似,没有常见的“产品”表。我认为这是一个更“快捷和肮脏”的解决方案,因为它完全消除了订单行和产品定义之间的外键。 优点:快速解决方案。 缺点:与第(1)项相同,加上丢失的RI。
- 通过创建公用标题表并使用自定义属性的键/值对(OrderLine [n] < - [1] Product [1] < - [n] ProductAttribute))使产品定义均匀化。 优点:保留关键关系;关于产品定义没有歧义。 缺点:报告(检索的产品及其属性的列表,例如),数据属性值的类型,性能(取产品属性,插入或更新的产品属性等)
如果任何人试图一种更成功的策略,我很乐意听到。
谢谢。