私はトランザクションデータベースを使って作業しています:テーブルの行が値のセットとして定義されているリレーショナルデータベースある時点でデータベースはその行を "考える"フィールドにはスキーマのSQL:テーブルの値の関数としてのビュー
パート:ID、見出し、本文:つまり
CREATE TABLE Article
(
id INTEGER,
PRIMARY KEY(id)
);
CREATE TABLE Article_headline
(
Article_id INTEGER,
headline TEXT,
tt DATETIME
FOREIGN KEY(Article_id) REFERENCES Article(id)
);
CREATE TABLE Article_body
(
Article_id INTEGER,
body TEXT,
tt DATETIME
FOREIGN KEY(Article_id) REFERENCES Article(id)
);
、仮想 "条" の表は、3つの列があります。
CREATE TEMPORARY VIEW Article_headline_old
AS SELECT Article_id, headline, MAX(tt)
FROM Article_headline
WHERE tt <= "2011-11-03 16:05:23"
GROUP BY Article_id;
CREATE TEMPORARY VIEW Article_body_old
AS SELECT Article_id, body, MAX(tt)
FROM Article_body
WHERE tt <= "2011-11-03 16:05:23"
GROUP BY Article_id;
CREATE TEMPORARY VIEW Article_old
AS SELECT id, headline, body
FROM Article, Article_headline_old, Article_body_old
WHERE Article_headline_old.Article_id = Article.id
AND Article_body_old.Article_id = Article.id;
私はこれら三つの一時的な見解に私が記事を取得するには、データベースを照会するたびに作成する必要があります:私は与えられた時間で定義された仮想「条」の表を表すために、一時的なビューを作成することができます
私はむしろそれをしません。私は、データベースから記事を選択したいときに
CREATE VIEW Article_headline_at(theTime)
AS SELECT Article_id, headline, MAX(tt)
FROM Article_headline
WHERE tt <= theTime
GROUP BY Article_id;
CREATE VIEW Article_body_at(theTime)
AS SELECT Article_id, body, MAX(tt)
FROM Article_body
WHERE tt <= theTime
GROUP BY Article_id;
CREATE VIEW Article_at(theTime)
AS SELECT id, headline, body
FROM Article,
Article_headline_at(theTime) AS Article_headline_old,
Article_body_at(theTime) AS Article_body_old
WHERE Article_headline_old.Article_id = Article.id
AND Article_body_old.Article_id = Article.id;
そして:私は、スキーマ自体の一部として永久ビュー「機能」を作成することを好む
SELECT * FROM Article_at("2011-11-03 16:05:23");
んSQLは、任意の同様の機能を持っています?
最初の2つの手順は、実際に私が必要とするものです。それでは、私はちょうど3番目のプロシージャを作成します:プロシージャを作成します:Article_at @theTime DATETIME SELECT ID、見出し、本文から本文、Article_headline_at(@theTime)、Article_body_at(@theTime) – Jordan