가정 해 보겠습니다 I가 각 고객은 별개의 목적에 정확히 두 개의 전화 번호가 다음 스키마 (단지 예) :관계형 스키마 디자인 : "2 ~ 하나의"관계 "뒤로 계단식 삭제"
create table customer (
id integer primary key,
home_phone_id integer not null,
work_phone_id integer not null,
foreign key (home_phone_id) references phone (id),
foreign key (work_phone_id) references phone (id)
);
create table phone (
id integer primary key,
number varchar(10) not null
);
을
을 집 전화 번호와 직장 전화 번호로 구분하기 위해 외래 키는 customer
테이블에 있습니다. 이 기술적으로 전화 번호가 아닌 다른 방법으로 "012"가 "부모"테이블과 customer
자식 합니다. 고객이 없으면 전화 번호를 묻지 않습니다.
고객 행이 삭제되면 휴대 전화의 두 행을 으로 자동 삭제합니다. 이것은 정상에서와 같이 "자식"에서 "부모"까지의 계단식이며, 부모에서 자식으로의 이 아닙니다. 내 인상은 SQL 데이터베이스 이이 동작을 지원하지 않는다는 것입니다. 이 작업을 수행하기 위해 트리거를 사용할 수는 있지만 실제로 지원되지 않는다고 생각하면 은 스키마를 잘못 설계하고 있음을 의미합니다. customer
부모를 만들고,
이 동일
home_phone
및work_phone
테이블을 작성하는customer_id
각 :나는 두 가지 대체 아주 좋은 것 같습니다 어느 것도 디자인을 상상할 수있다.
- 는
phone
에 외래 키를 이동하여customer
부모를 확인하고 전화 번호의 두 가지 유형을 구별하는 (부울is_home
같은)phone
에 여분의 열을 사용합니다.
어떻게 설계할까요?
옵션 3 : customer_id, phone_id, 중간에 링크로 입력하는 세 번째 테이블 만들기 – Randy