残念ながら、現在のSQLまたはすべてのRDBMS製品でのその実装は、一時的な関係を完全にはサポートしていません。
TeradataとDB2のみが、2つ以上の列に時間を有する制約を実装するいくつかの機能を備えています。
私の例:
スキーマテストの設定;
CREATE TABLE PRODUCT(
product_ID INT NOT NULL、
suplier NVARCHAR(50)、
PRIMARY KEY(product_ID)
);
CREATE TABLE CAMPAIGN(
campaign_ID INT NOT NULL、
product_ID INT NOT NULL、
price DECIMAL、
PRIMARY KEY(campaign_ID)
)
;
ALTER TABLE CAMPAIGN
ADD CONSTRAINT XFK_campaign_productid
FOREIGN KEY(product_ID)REFERENCES PRODUCT(product_id)
ON DELETE NO ACTION;
テンポラル列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、
price DECIMAL、
PRIMARY KEY(campaign_ID、business_startdate、transaction_starttime)
)
;
DB2の場合、次の構文には一時的な主キー制約があります。
CREATE TABLE CAMPAIGN(
campaign_ID INT NOT NULL、
product_ID INT NOT NULL、
business_startdate DATE NOT NULL、
business_enddate DATE NOT NULL、
price DECIMAL、
PERIOD BUSINESS_TIME(business_startdate、business_enddate)、
PRIMARY KEY(campaign_ID、BUSINESS_TIME WITHOUT OVERLAPS)
)
;