时间有效性和主/外键关系

mon*_*use 11 oracle database-design

我已经阅读了几个显示时间有效性和时间特征的 oracle 教程。但是,在我阅读的示例中,演示表中没有使用主键。

http://docs.oracle.com/cd/E16655_01/appdev.121/e17620/adfns_design.htm#ADFNS1005 http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm /temporal/temporal.html

是否应该将主键添加到这些表中?我问是因为我想知道这些时态表中的一个应该如何被另一个表引用。我可以将一个时态表中的外键添加到另一个时态表吗?

如果我添加一个 pk/外键关系,然后用 pk 更新表中的引用,带有 fk 的表指向一个不再相关的记录......时态数据是否破坏了正常的主键 - 外键关系?如果是这样,这如何影响性能,我是否只使用普通列作为“外键”并为查询中的引用时间段选择正确的列?

有没有人知道或手头有任何示例或教程来显示具有正常或伪正常 pk / fk 用法的时间数据?

谢谢

小智 2

不幸的是,目前的 SQL 或其在所有 RDBMS 产品中的实现并不完全支持时态关系。

只有 Teradata 和 DB2 具有一些实现在两个或更多列中具有时间约束的功能。

我的例子:

设置模式测试;

创建表产品 (
product_ID INT NOT NULL,
供应商 NVARCHAR(50),
PRIMARY KEY (product_ID)
) ;

创建表活动(
campaign_ID INT NOT NULL,
product_ID INT NOT NULL,
价格DECIMAL,
PRIMARY KEY(campaign_ID)

更改表营销活动
添加约束 XFK_campaign_productid
外键 (product_ID) 引用产品 (product_id)
删除无操作;

如果添加临时列business_startdate 和business_enddate 以及可选的
transaction_starttime 和transaction_endtime,则无法再强制执行引用完整性。

如果您想实现如下约束,您可能必须实现触发器或存储过程或应用程序级编码:

创建表活动(
campaign_ID INT NOT NULL、
product_ID INT NOT NULL、
business_startdate DATE NOT
NULL、business_enddate DATE NOT NULL、
transaction_starttime TIMESTAMP NOT NULL、
transaction_endtime TIMESTAMP NOT NULL、
price DECIMAL、
PRIMARY KEY(campaign_ID、business_startdate、transaction_starttime)

对于 DB2,存在以下语法的临时主键约束:

创建表活动(
campaign_ID INT NOT NULL、
product_ID INT NOT NULL、
business_startdate DATE NOT NULL、
business_enddate DATE NOT NULL、
价格 DECIMAL、
PERIOD BUSINESS_TIME(business_startdate、business_enddate)、
PRIMARY KEY(campaign_ID、BUSINESS_TIME 不重叠)

;