다음 표를 상상해보십시오. 제 경우에는 name
이 unique
과 not null
[unique + not null = 기본 키]가되어야한다고 완전히 확신합니다. 따라서 name
은 기본 키입니다. 몇 가지 이유로 (아마도 습관에 의해), 나는 자연스럽게 int 타입의 기본 키 id
컬럼을 만들었습니다.sql 데이터베이스 : 2 열 (id 이름) 및 기본 키 2 개가있는 테이블 세 번째 표준 양식 보이스 코드 테이블 일반 양식
다른 가정 : 나는 절대적으로 내 테이블에 name
을 유지해야하며 name
(유형은 varchar
)이 결코 20자를 초과하지 않을 것이라고 확신합니다.
내 첫 번째 질문은 [예 또는 아니오 예상되는 가까운 질문 일 가능성이 높습니다.] : 이러한 테이블을 만들면 BCNF Boyce-Codd 표준 양식을 존중합니까?
두 번째 선택형 질문 [아마도 공개 질문] :이 경우 열 id
을 만드는 것이 좋습니다. 두 속성을 포함하는 관계가 BCNF에 항상 있지만
CREATE TABLE Y (
id int,
name varchar(20),
PRIMARY KEY(id, name)
);
'name'과'id' 둘 다 * 후보 키 *입니다. 이 중 하나만 기본 키로 선택할 수 있습니다. 그리고 BCNF를 위반하면 최소한 3 개의 칼럼이 필요합니다 (주어진 PK를 가지고 있습니다). – joop
* unique + not null = 후보 키 * –
@ MikeSherrill'CatRecall '네가 옳습니다. 내 실수 야. 나는 unique + not null = 후보 키 – S12000