레코드가 물리적으로 업데이트되지 않지만 새로운 레코드를 추가하여 논리적으로 업데이트되는 "삽입 전용" CRUD 값으로 더 큰 시퀀스를 전달합니다. 이 경우 "seq"(시퀀스) 열은 기본 키로 간주 할 수있는 내용에 더 가깝지만 "id"는 레코드의 논리적 식별자입니다.하나의 열에 최대 값을 갖는 테이블의 행에 대한 논리 테이블을 나타내는 CTE
seq id name | CRUD | ----|-----|--------|------| 2 | 10 | joe | U | 3 | 11 | kent | C | 5 | 12 | sue | U | 6 | 13 | jill | C | 7 | 14 | bill | C |
에서 :
seq id name | CRUD | ----|-----|--------|------| 1 | 10 | john | C | 2 | 10 | joe | U | 3 | 11 | kent | C | 4 | 12 | katie | C | 5 | 12 | sue | U | 6 | 13 | jill | C | 7 | 14 | bill | C |
이 테이블의 논리적 표현은 "가장 최근의"기록을 고려한다 : 예 아래에서
이 테이블의 물리적 표현입니다 예를 들어 id = 12 인 사람의 가장 최근 레코드를 검색하려면 다음과 같이하십시오.
SELECT
*
FROM
PEOPLE P
WHERE
P.ID = 12
AND
P.SEQ = (
SELECT
MAX(P1.SEQ)
FROM
PEOPLE P1
WHERE P.ID = 12
)
... 그리고 나는이 행받을 것이다 :
WITH
NEW_P
AS
(
--CTE representing all of the most recent records
--i.e. for any given id, the most recent sequence
)
SELECT
*
FROM
NEW_P P2
WHERE
P2.ID = 12
이미 서브 쿼리를 사용하여 첫 번째 SQL의 예를 우리를 위해 작동합니다
seq id name | CRUD | ----|-----|--------|------| 5 | 12 | sue | U |
내가 대신 할 거라고하는 것은이 같은입니다.
질문 : 질문 : 테이블의 "가장 최근"의 논리적보기를 활용해야 할 때 술어를 단순화하기 위해 어떻게 CTE를 활용할 수 있습니까? 본질적으로, 나는 가장 최근의 레코드를 얻고 싶을 때마다 하위 쿼리를 인라인 할 필요가 없습니다. 차라리 CTE를 정의하고 후속 술어에서이를 활용할 것입니다.
P. 현재 DB2를 사용하고 있지만 데이터베이스에 무관 한 솔루션을 찾고 있습니다.
질문이 무엇인지 잘 모릅니다. 데이터 모델은 확장 성이없는 것 같습니다. 전체 테이블 크기와 각 ID에 대한 레코드 수가 증가함에 따라 어떤 레코드가 최신 레코드인지 파악하는 데 더 많은 시간을 할애 할 것입니다.어떤 레코드가 활성 (최신)인지 보여주는 플래그를 저장할 지표 열을 추가하는 것이 좋습니다. – mustaccio
@ mustaccio, 조언을 주셔서 감사합니다. '삽입 전용'패러다임이 사용되는 다른 비즈니스 이유가 있습니다. 이것이 영향을 받거나 변경 될 수는 있지만 데이터 모델이 그대로 있다고 가정 할 때 원래의 질문은 다루지 않습니다. – sparty02
내가 말했듯이, 나는 당신의 질문이 무엇인지 모른다. "생각들?" -- 그게 다야? 표시기 열을 추가해도 "삽입 만하는 패러다임"은 변경되지 않지만 테이블을 더 쉽고 빠르게 쿼리 할 수 있습니다. – mustaccio