나는 트랜잭션 데이터베이스로 작업하고 있습니다 : 테이블의 행이 값의 집합으로 정의되는 관계형 데이터베이스 주어진 시간에 데이터베이스는 행의 "생각"을 처리합니다. 필드에 포함됩니다. 스키마의SQL : 테이블의 값의 함수로보기
부 : 아이디, 제목, 몸과 : 즉
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)
);
는 가상 "조"표는 세 개의 열이 있습니다.
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은 유사한 기능이를 ?
처음 두 절차는 실제로 내가 필요한 것입니다. 그런 다음 제 3의 프로 시저를 작성합니다. 프로 시저 작성 : Article_at @theTime DATETIME SELECT ID, 제목, body FROM Article, Article_headline_at (@theTime), Article_body_at (@theTime) – Jordan