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


11

我通读了一些有关时间有效性和时间特性的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用法的时间数据?

谢谢

Answers:


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,则不能再强制执行引用完整性。

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

CREATE TABLE CAMPAIGN(
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,
价格DECIMAL,
PRIMARY KEY(CAMPAIGN_ID,business_startdate,transaction_starttime)

;

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

CREATE TABLE CAMPAIGN(
campaign_ID INT非空,
product_ID INT非空,
business_startdate DATE非空,
business_enddate DATE非空,
价格DECIMAL,
PERIOD BUSINESS_TIME(business_startdate,business_enddate),
PRIMARY KEY(campaign_ID,BUSINESS_TIME不带重叠

;


您是否可以提供有关实施约束的要素的链接,该约束在两列或更多列中有时间?
AK

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.