예를 들어, "file_exported"와 같은 이 발생했음을 나타내는 NULL 타임 스탬프 일 수 있습니다. 파일이 반출되고 NULL이 아닌 값을 가지면 절대로 NULL로 설정해서는 안됩니다.
다른 예로 히트 카운터가 있는데, 정수는 증가 할 수 있지만, 결코 감소시킬 수는 없습니다.
이 두 가지 경우 모두 단순히 이러한 변경 사항을 주석이 달린 테이블의 특성으로 기록하지 않습니다. '내 보낸'또는 '적중 횟수'는 관련 객체에서 직각으로 연결된 실제 세계 개념을 나타내는 뚜렷한 아이디어입니다.
그래서 그들은 단순히 서로 다른 관계가됩니다. 히트 카운터가 유사하게 다른 테이블
CREATE TABLE thing_file_exported(
thing_id INTEGER PRIMARY KEY REFERENCES(thing.id),
file_name VARCHAR NOT NULL
)
: 우리는 단지 원하기 때문에 "file_exported"한 번 발생하는
CREATE TABLE thing_hits(
thing_id INTEGER NOT NULL REFERENCES(thing.id),
hit_date TIMESTAMP NOT NULL,
PRIMARY KEY (thing_id, hit_date)
)
그리고 당신은
SELECT thing.col1, thing.col2, tfe.file_name, count(th.thing_id)
FROM thing
LEFT OUTER JOIN thing_file_exported tfe
ON (thing.id = tfe.thing_id)
LEFT OUTER JOIN thing_hits th
ON (thing.id = th.thing_id)
GROUP BY thing.col1, thing.col2, tfe.file_name
지금까지 조사한 바있으세요? –
이것을 위해 트리거를 사용하는 것이 가장 좋습니다. 현재의 값이 null가 아닌지를 확인한 다음, null로 설정하려고하면 오류가 발생합니다. 역사적인 변경 로그가 필요하다면 직접 빌드해야합니다. –
어떤 DBMS를 사용하고 있습니까? 신탁? PostgreSQL? –