PostgreSQL은 다른 관계형 데이터베이스 시스템과 마찬가지로 데이터베이스 테이블 간의 복잡한 관계를 허용합니다. 일반적인 시나리오는 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 연결될 수 있는 다대다 관계입니다.
PostgreSQL에서 다대다 관계를 구현하려면 일반적으로 세 번째 중간 테이블이 필요합니다. 이 "접속 테이블" 또는 "브리지 테이블"은 두 개의 원래 테이블을 연결합니다. 여기에는 두 테이블의 기본 키를 참조하는 외래 키가 포함되어 복합 기본 키(또는 고유 제약 조건)를 형성합니다.
예를 들어 설명하겠습니다.
<code class="language-sql">CREATE TABLE product ( product_id SERIAL PRIMARY KEY, product_name TEXT NOT NULL, price NUMERIC NOT NULL DEFAULT 0 ); CREATE TABLE invoice ( invoice_id SERIAL PRIMARY KEY, invoice_number TEXT NOT NULL, invoice_date DATE NOT NULL DEFAULT CURRENT_DATE ); CREATE TABLE invoice_product ( invoice_id INTEGER REFERENCES invoice (invoice_id) ON UPDATE CASCADE ON DELETE CASCADE, product_id INTEGER REFERENCES product (product_id) ON UPDATE CASCADE, quantity NUMERIC NOT NULL DEFAULT 1, CONSTRAINT invoice_product_pkey PRIMARY KEY (invoice_id, product_id) );</code>
invoice_product
테이블은 invoice
과 product
을 연결하는 접합 테이블 역할을 합니다. invoice_id
및 product_id
은 참조 무결성을 보장하는 외래 키입니다. ON UPDATE CASCADE
, ON DELETE CASCADE
절은 메인 테이블의 레코드가 수정되거나 삭제될 때 데이터 일관성을 유지합니다.
invoice
또는 product
테이블에서 행을 삽입하거나 삭제할 때 외래 키에 대한 계단식 작업이 invoice_product
테이블의 관련 항목을 자동으로 업데이트하거나 제거하여 데이터 관리를 단순화합니다.
이 다대다 관계에서 데이터를 쿼리하려면 JOIN
작업을 사용하세요. 예를 들어, 특정 송장과 관련된 모든 제품을 찾으려면:
<code class="language-sql">SELECT p.product_name, ip.quantity FROM invoice i JOIN invoice_product ip ON i.invoice_id = ip.invoice_id JOIN product p ON ip.product_id = p.product_id WHERE i.invoice_id = 123;</code>
요약하자면, PostgreSQL에서 다대다 관계를 효과적으로 관리하려면 적절한 외래 키 제약 조건이 포함된 접합 테이블을 생성해야 합니다. 이 접근 방식은 명확한 데이터 모델링과 효율적인 데이터 검색을 촉진합니다.
위 내용은 PostgreSQL에서 다대다 관계를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!