집 >데이터 베이스 >MySQL 튜토리얼 >외래 키 값을 기반으로 PostgreSQL에서 사용자 정의 하위 시퀀스를 어떻게 생성할 수 있습니까?
PostgreSQL 사용자 정의 하위 시퀀스 생성: 외래 키 값을 기반으로 하는 하위 시퀀스 생성 방법
이 기사에서는 PostgreSQL에서 외래 키 값을 기반으로 사용자 정의 하위 시퀀스를 생성하는 방법을 살펴봅니다. PostgreSQL의 시퀀스는 일반적으로 테이블의 행에 대한 고유 식별자를 생성하는 데 사용되지만 경우에 따라 다른 열의 값에 따라 시퀀스를 생성하여 하위 시퀀스를 생성해야 할 수도 있습니다.
다음 이미지는 문제의 핵심을 보여줍니다.
맞춤 상관관계 기반 시퀀스 생성
다음 테이블 구조를 고려하세요.
列名 | 数据类型 | 说明 |
---|---|---|
id | integer | 外键,指向另一张表 |
seq | integer | 每个id的序列号 |
data | text | 无关信息 |
목표는 id와 seq의 각 고유 조합이 테이블의 행에 해당하는 식별자 시스템을 구축하는 것입니다.
PostgreSQL은 테이블 디자인과 트리거의 기발한 조합을 통해 이를 달성합니다. things
및 stuff
라는 두 개의 테이블을 만들 수 있습니다. 여기서 things
는 고유 식별자를 나타내고 stuff
은 각 식별자와 관련된 실제 데이터를 저장합니다.
테이블 및 트리거 만들기
things
테이블은 기본 키로 ID를 생성할 수 있습니다.
<code class="language-sql">CREATE TABLE things ( id serial primary key, name text );</code>
stuff
테이블의 경우 id와 seq의 조합을 기본 키로 정의합니다.
<code class="language-sql">CREATE TABLE stuff ( id integer references things, seq integer NOT NULL, notes text, primary key (id, seq) );</code>
다음으로 things
테이블에 make_thing_seq
이라는 트리거 함수를 구현합니다. 이 트리거는 행이 삽입될 때마다 호출되며 삽입된 ID로 새 시퀀스를 생성합니다.
<code class="language-sql">CREATE FUNCTION make_thing_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin execute format('create sequence thing_seq_%s', NEW.id); return NEW; end $$;</code>
그런 다음 things
테이블에 make_thing_seq
이라는 트리거를 생성합니다.
<code class="language-sql">CREATE TRIGGER make_thing_seq AFTER INSERT ON things FOR EACH ROW EXECUTE PROCEDURE make_thing_seq();</code>
이렇게 하면 things
테이블에 새 행이 삽입될 때마다 해당 시퀀스가 생성됩니다.
마지막으로 각 행을 삽입하기 전에 호출되고 fill_in_stuff_seq
열을 시퀀스의 적절한 다음 값으로 채우는 seq
이라는 트리거 함수를 만듭니다.
<code class="language-sql">CREATE FUNCTION fill_in_stuff_seq() RETURNS trigger LANGUAGE plpgsql AS $$ begin NEW.seq := nextval('thing_seq_' || NEW.id); RETURN NEW; end $$;</code>
stuff
테이블에 fill_in_stuff_seq
이라는 이름의 트리거를 만듭니다.
<code class="language-sql">CREATE TRIGGER fill_in_stuff_seq BEFORE INSERT ON stuff FOR EACH ROW EXECUTE PROCEDURE fill_in_stuff_seq();</code>
이렇게 하면 stuff
테이블의 행이 삽입될 때 seq
값이 연결된 id 값에 따라 자동으로 설정됩니다.
결과
이러한 트리거를 사용하면 원하는 시퀀스 생성을 달성할 수 있습니다. things
테이블에 데이터를 삽입하면 새 시퀀스가 생성되고, stuff
테이블에 데이터를 삽입하면 ID 참조를 기반으로 올바른 시퀀스 번호가 자동으로 할당됩니다.
이러한 기술을 결합하여 특정 정렬 요구 사항을 충족하는 복잡하고 유연한 데이터 구조를 만들 수 있습니다.
위 내용은 외래 키 값을 기반으로 PostgreSQL에서 사용자 정의 하위 시퀀스를 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!