具有关系的记录的版本控制概念(外键)[数据库]

对于每个表都有一个额外的历史/修订表的版本控制概念,您想在其中跟踪更改,我想知道如何处理关系(外键)?

示例:

Table: T_Shelf
ID,Name

Table: T_Inventory
ID,Item,FK_T_Shelf_ID

Table: T_Shelf_Rev
ID,ID_T_Shelf,Name,Date_Modified

Table: T_Inventory_Rev
ID,ID_T_Inventory,(FK_T_Shelf_ID or FK_T_Shelf_Rev_ID),Date_Modified

我是否将外键链接到相应的历史记录表?还是这种方法根本不适用于关系数据库?

iCMS 回答:具有关系的记录的版本控制概念(外键)[数据库]

像这样建模:

CREATE TABLE t_shelf (
  shf_surrogate_id INTEGER NOT NULL 
    DEFAULT HASH(shf_business_id,shf_valid_from) NOT NULL PRIMARY KEY,shf_business_id  INTEGER NOT NULL,shf_valid_from  DATE     NOT NULL,shf_valid_to    DATE     NOT NULL,shf_name        VARCHAR(32)
)

CREATE TABLE inventory (
  inv_surrogate_id INTEGER NOT NULL 
    DEFAULT HASH(inv_business_id,inv_valid_from) NOT NULL PRIMARY KEY,shf_surrogate_id INTEGER NOT NULL FOREIGN KEY REFERENCES t_shelf,inv_business_id  INTEGER NOT NULL,inv_valid_from   DATE    NOT NULL,inv_valid_to     DATE    NOT NULL,inv_item         VARCHAR(32)
);

不要按照您的建议将词干和版本分开。 当前活动记录的 valid_to 日期值为 9999-12-31。 如果您需要有关如何处理此类模型的详细信息 - 请在此处回答。

某些数据库提供 HASH() 函数,该函数根据一个或多个输入表达式返回一个整数,逗号分隔。我在这里用的。否则,您将不得不使用数据库序列对象。

本文链接:https://www.f2er.com/187073.html

大家都在问