2013-10-14 2 views
1

빠른 질문이 있습니다. 테이블에서 외래 키로 기본 키만 가질 수 있습니까?외래 키만 기본 키가 될 수 있습니까

설명해주십시오. 내가 테이블을 만들었을 때 때때로 그들 중 일부가 외래 키인 다수의 키가있는 테이블을 가지고 있습니다. 예를 들어 : 그것은 같은 것을 할 수 있는지

create table Pet(
Name varchar(20), 
Owner char(1), 
Color varchar(10), 
primary key(Name, Owner), 
foreign key(Owner) referecnes Person(Ssn) 
); 

는 이제 궁금하네요 :

create table WorksAs(
Worker char(1), 
Work varcahr(30), 
primary key(Worker), 
foreign key(Worker) references Person(Ssn) 
); 

이 두 테이블은 동일한 기본 키를 가진이 발생할 것입니다. 이것은 피해야하는 것이거나 데이터베이스를 설계하는 좋은 방법입니까? 위의 표준이 좋지 않다면 단순히 Work 변수를 기본 키로 만들면됩니다.하지만 필요하지 않으면 건너 뛰는 것이 더 간단 해 보입니다.

+0

나는 당신의 테이블 WorkAs 관계형 테이블을해야한다고 생각을 생성하는 고유 제한 조건을 추가하는 공간을 절약 할 수 있습니다. 즉, 예를 들어 WorkPlaces가있는 테이블, Workers가있는 테이블 및 Workers-> WorkPlace와 관계를 설정하는 WorksAs 테이블을 가질 수 있습니다. 그렇지 않으면 같은 테이블 (Worker)을 사용하고 char Workplace로 열을 추가하는 것이 어떻습니까? 그러나 귀하의 질문에 대답, 네가 가질 수 있습니다. –

+0

나는 그것을 완벽하게 말할 것이다. 그러나 ... Works 테이블의 해당 필드를 Person 테이블로 직접 이동하지 않는 것이 좋습니다. 테이블 하나 적습니다. 한 번만 가입하십시오. –

+0

우선이 것은 내가 알고 싶었던 것을 설명하는 것이 더 쉬웠 기 때문에이 질문을 할 때 생각해 보았던 나쁜 예일뿐입니다. 둘째로, 내가 이것을 알고 싶었던 이유는 데이터베이스에서 NULL 값을 빼내야 할 임무와 함께 일하고 있다는 것이 었습니다. 그래서 내가 PersonAs 테이블에 WorksAs를 넣으면 나는 원하지 않는 가능한 NULL 값의 문제를 갖게 될 것입니다. –

답변

1

예. 다음과 같은 이유로.

  1. 기본 키를 기본 키로 설정하면 고유성이 강제적으로 적용됩니다.
  2. 기본 키가 클러스터 됨 (dbms에 따라 다름)으로 인해 일부 쿼리의 성능이 향상됩니다.
  3. 그것은 어떤 DBMS도 고유 인덱스
2

네, 그렇게하는 것이 합법적입니다.

1

예, 그렇게 할 수 있음);

는 사실, 이것은 IS-A relations의 기초이다. 하지만 기본 키는 외래 키가 NULL 값을 가질 수 있으므로주의해야합니다.

+0

분명히 사실이지만, OP는 "테이블이 외래 키로 만 기본 키를 가질 수 있습니까?"라는 질문에 대해 세부 테이블에 기본 키 제약 조건을 추가 할 것이라고 추측합니다. –

+0

공정한 ..그러나 mysql에서 처음 시작한 것은 제스퍼가 NULL 값의 문제에 직면했을 수도 있다는 것입니다. –

관련 문제