【问题标题】:One table for different products with same fields but with different data range?一张表用于具有相同字段但数据范围不同的不同产品?
【发布时间】:2018-07-01 03:07:54
【问题描述】:

我想在我的数据库(以及一张表)中存储许多不同的产品。在继承(每个具体类型的表)的帮助下,我将所有常见字段(日期、客户、订单 ID)保留在父表中,并为一种产品创建了一个子表。

一个子表 => 它包含许多具有相同和不同字段的不同产品

           ProductOne = {A,B,**C**}
           ProductTwo = {A,B,**D**}
           ProductThree ={A,B,**F**}

现在我做了 TableAllProduct 和表格的字段是 {A,B,C,D,F}

之所以选择这个设计,是因为我正在考虑我未来的新产品,例如,如果我们有这些现有字段{A,B,C,D,F}的新产品,那么我们应该能够存储新的TableAllProduct 表中的产品数据,无需任何软件升级(而是根据需要新代码的继承方法创建新表)

TableAllProduct 可以容纳三个不同的产品 ProductOne = {A,B,C} ProductTwo = {A,B,D} ProductThree ={A,B,F}

下一步是将数据存储在 TableAllProduct 中

根据给定的场景,ProductOne 和 ProductTwo 具有公共字段 {A,B} 但 A 字段存储来自 ProductOne 以及 ProductTwo 的数据

ProductOne 有以下选项=={data__A_1,data__A_2,data__A_3}

ProductTwo 有以下选项 =={data__B_1,data__B_2 } 我从其他桌子带来的(曼尼到曼尼)

这里我们打破了RDBMS的规则,因为我在一列需要多个外键,但RDBMS不支持,删除/编辑外键职责/功能可以使用DELETE_trigger(它将检查类别表中的记录)

这样,我可以在表中存储现在和将来的多个产品。

这种方法有什么缺点?

是否有任何其他可能的解决方案可以用更好的方式解决这个问题。(我知道实体-属性-价值模型,但在我们的情况下,产品不会每天/每周改变基数,而且 EVA 太复杂而无法维护).谢谢

【问题讨论】:

    标签: c# database-design


    【解决方案1】:

    您需要标准化您的数据。

    您描述的模型可以工作。您需要让 AllProducts 表只包含所有产品的共同属性(列)。名称和 SKU 等属性,也可能是对供应商/供应商的引用。

    一旦您确定了共同属性,剩余的属性就可以移动到特定于每个产品的表格中。 SpecificProduct 表可以使用 AllProducts 表的 PK 作为 PK 和 FK。 SpecificProduct 中的每条记录在 AllProducts 表中也会有一条记录。特定产品的完整数据由连接到特定产品表列的 AllProducts 表中的属性组成。

    当属性的变化子集与表中记录的小子集相关时,此策略有助于保持 AllProducts 表的宽度较小。通过重用 AllProducts PK 作为特定产品表的 PK/FK,您可以确保连接性能也很好。

    【讨论】:

    • 我有 200 多种具有共同属性但数据(选项)不同的产品。根据您的情况,我需要创建 200 个表。将来,每一个新产品(相同属性),我都必须创建新表,这需要额外的开发时间。
    • 我已经有了 AllProducts 和 SpecificProduct 表。但我希望 SpecificProduct 表应该包含多个产品。谢谢
    • 只要数据类型相同,可以将不同的信息放在同一列。但是,我认为您会发现开发和支持比为每个产品创建表的开销要复杂得多。如果您确实重载了列定义,您也可以使用通用列名称、columnA、columnB 等,因为列的名称实际上不会描述数据。 200 张桌子听起来可能很重要,但您只需支付一次费用。根据行重新定义列的含义,会让你头疼很久。
    • 列名可以在 ProductA(A,B,C) 和 ProductB(A;B;C;) 之间相同。但是 ProductA 的 Coulmn A 有 range(1,2,3) 和ProductB 的 Coulmn A 有范围(9,12,23)。
    • 如果我们按照你的策略,现在我们有 200 个产品(表)。它现在可以工作,但是下个月,如果我们会有类似列的新产品。然后我们再次创建新表??
    猜你喜欢
    • 2021-04-18
    • 2021-10-17
    • 1970-01-01
    • 2022-12-04
    • 2013-12-27
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多