以有效的方式存储关系对象的修订

时间:2009-11-19 11:35:14

标签: sql mysql database database-design

我不确定此类问题是否已经得到解答。在我的数据库中,我有一个产品表和规格表。每种产品都有多种规格。在这里,我需要将每个产品的修订版存储在数据库中,以便以后查询它们以用于历史记录。

每次用户更改这些关系时,我都需要一种有效的方法来将产品的关系存储到规范中。此外,数据量可能会变得非常大。例如,假设数据库中有100000个产品:每个产品可以有30个规格,每个产品至少有20个修订版。因此,通过将所有数据存储在单个表中,数据量变得非常高。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果这纯粹是出于“档案”的目的,那么修改的单独表格可能会更好。

但是,如果您需要将以前的修订版同等地视为当前版本(例如,如果您希望让用户能够将产品还原到以前的版本),那么最好保留单个产品表,而不是而不是在表之间复制数据。如果你担心性能,这就是索引的用途。

您可以为产品表创建复合主键,例如PRIMARY KEY (product_id, revision)。通过选择特定revision具有最高product_id的行,可能会找到当前版本的存储过程 - 这将非常有用。

答案 1 :(得分:2)

我建议使用表,具有HistoryDate列的当前表的精确副本,并将修订存储在此表中。这可以对所有3个表进行。

通过将修订版与主表分开,在查询主表时不会产生任何性能损失。

您还可以查看保留记录以指示更改数据的用户。