현재 이와 비슷한 문제가 있습니다. 아버지에 대한 정보를 저장하기위한 테이블을 만들려고합니다.여러 열 사이에 고유 제한을 적용하는 방법은 무엇입니까?
모든 아버지가 두 아들을두고 있으며 모든 아버지가 항상 두 자녀를두고 존재할 것임을 가정하십시오. Son_Table이와 상호 작용 다른 테이블이 있기 때문에
Father_Table
father_id | son1_id | son2_id | father_text_info
--------------------------------------------------------------
13 | 8 | 11 | "some info..."
Son_Table
son_id | name
----------------------------
8 | Moris
단순히 Father_Table에 Son_Table 정보를 추가하지 않았습니다.
내 질문은, Father_Table에 이미있는 경우, son1_id 또는 son2_id를 Father_Table에 입력 할 수 없도록하려면 어떻게해야합니까?
CREATE TABLE father_table (
father_id serial PRIMARY KEY,
son1_id integer NOT NULL,
son2_id integer NOT NULL,
FOREIGN KEY (son1_id) REFERENCES Son_Table (son_id),
FOREIGN KEY (son2_id) REFERENCES Son_Table (son_id),
UNIQUE (son1_id, son2_id),
UNIQUE (son2_id, son1_id),
UNIQUE (son1_id),
UNIQUE (son2_id)
)
중복 Son_Table ID를 가진 아래 입력이 여전히 허용 그러나 :
father_id | son1_id | son2_id | father_text_info
--------------------------------------------------------------
13 | 8 | 11 | "some info..."
--------------------------------------------------------------
14 | 11 | 8 | "other info..."
먼저 스키마가 불량하고 비정규 화되었습니다. 둘째, 총을 머리에 쓰고 그 스키마를 사용해야한다면, 트리거를 사용하십시오. – Drew
'serial'은 PostgreSQL 구문입니다. [mysql] 태그를 제거하십시오. –
하나의 아이디어는 논리를 뒤집고 항상 두 행을 모두 갖는 것입니다. 왕복 운동은 종종 이런 식으로 작동합니다. – Strawberry