web-dev-qa-db-ja.com

時間的妥当性と主/外部キーの関係

時間的な有効性と時間の機能を示すOracleのチュートリアルをいくつか読みました。ただし、私が読んだ例では、デモテーブルで使用されている主キーはありません。

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

これらのテーブルに主キーを追加する必要がありますか?これらのテンポラルテーブルの1つが別のテーブルによってどのように参照されるのかについて疑問に思っているので、私は尋ねています。テンポラルテーブル間で外部キーを追加できますか?

Pk /外部キーの領域を追加し、テーブルの参照先をpkで更新すると、fkのあるテーブルは、関連のなくなったレコードを指します...テンポラルデータは通常の主キー-外部キーの関係を壊しますか?その場合、これはパフォーマンスにどのように影響しますか?通常の列を「外部キー」として使用し、適切なものを選択しますか?クエリで参照されている期間?

通常または疑似通常のpk/fkの使用法で時間データを表示する便利な例やチュートリアルを知っているか、持っている人はいますか?

ありがとう

11
user1778606

残念ながら、現在のSQLまたはすべてのRDBMS製品でのその実装は、一時的な関係を完全にはサポートしていません。

TeradataとDB2のみが、2つ以上の列に時間を有する制約を実装するいくつかの機能を備えています。

私の例:

スキーマテストの設定;

テーブルプロダクトの作成(
product_ID INT NOT NULL、
サプライヤNVARCHAR(50)、
主キー(product_ID)
);

テーブルキャンペーンの作成(
campaign_ID INT NOT NULL、
product_ID INT NOT NULL、
価格DECIMAL、
主キー(campaign_ID)

;

ALTER TABLEキャンペーン
制約を追加XFK_campaign_productid
FOREIGN KEY(product_ID)REFERENCES PRODUCT(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、
価格DECIMAL、
主キー(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 WITHOUT OVERLAPS)

;

2
Analyst