Oop 冗余参考与历史数据
我有一个域模型,其中每个行项目都与一个产品关联。该产品有一个选项列表。每个选项都是必需的或可选的。用户可以包括一个可选选项,将其添加到行项目的选择列表中 为了避免冗余,我的第一个想法是从行项目的选择列表中排除必需的选项。有很多必需的选项,因此将它们包含在每个行项目中会导致数据库膨胀 问题是这些产品可能会随着时间的推移而改变。曾经需要的选项可以变成可选选项,反之亦然。产品中可能会添加全新的选项。这给我最初的想法带来了一个问题,因为行项目选择列表的含义将取决于订购时产品的选项 那我该怎么办Oop 冗余参考与历史数据,oop,design-patterns,architecture,relational-database,Oop,Design Patterns,Architecture,Relational Database,我有一个域模型,其中每个行项目都与一个产品关联。该产品有一个选项列表。每个选项都是必需的或可选的。用户可以包括一个可选选项,将其添加到行项目的选择列表中 为了避免冗余,我的第一个想法是从行项目的选择列表中排除必需的选项。有很多必需的选项,因此将它们包含在每个行项目中会导致数据库膨胀 问题是这些产品可能会随着时间的推移而改变。曾经需要的选项可以变成可选选项,反之亦然。产品中可能会添加全新的选项。这给我最初的想法带来了一个问题,因为行项目选择列表的含义将取决于订购时产品的选项 那我该怎么办 如果我还
如果你的要求选项列表将来有可能发生变化,我会选择第一个选项。如果不将这些选项与数据库中的每个行项目一起存储,则必须跟踪在哪些日期需要哪些选项,并将它们分别连接起来。这将不必要地使连接逻辑复杂化
至于数据库膨胀,我不认为这会像你想象的那样糟糕。听起来您可能已经有了只包含产品键和选项键的
ProductOptions
和lineitempoptions
的联接表。根据您的第一个设计选择,后一个表应该是唯一具有更多记录的表。因为它只包含键,所以它的记录不会占用更多的内存,而且加入它会非常快。如果您的所需选项列表将来可能会发生变化,我会选择第一个选项。如果不将这些选项与数据库中的每个行项目一起存储,则必须跟踪在哪些日期需要哪些选项,并将它们分别连接起来。这将不必要地使连接逻辑复杂化
至于数据库膨胀,我不认为这会像你想象的那样糟糕。听起来您可能已经有了只包含产品键和选项键的ProductOptions
和lineitempoptions
的联接表。根据您的第一个设计选择,后一个表应该是唯一具有更多记录的表。因为它只包含键,所以它的记录不会占用更多的内存,而且加入它会非常快