微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决具有关系的记录的版本控制概念外键[数据库]

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

示例:

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

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

解决方法

像这样建模:

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() 函数,该函数根据一个或多个输入表达式返回一个整数,逗号分隔。我在这里用的。否则,您将不得不使用数据库序列对象。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。