1

문제는 너무 큰 관계 때문에 정규화 후 실제 외래 키인 20 개의 기본 키 (합성 키)와 유사합니다.데이터베이스는 정규화되었지만 결과 복합 키에는 20 개의 열이 포함되어 있습니다.

관계를 고유하게 식별하기 위해 기본 키로 선언해야합니다. 이 올바른지?

+0

예를 게시 할 수 있다면 도움이 될 수 있습니다. –

+0

예를 들어 2010 년에 더 많은 정보가 필요한 것 같지만 정보가 제공되지 않았습니다. 나는 그것이 닫히는 것이 그러므로 최고다고 생각한다. – halfer

답변

2

먼저 복합 키를 사용하지 마십시오. 그들은 나쁜 기술입니다. 그들은 느리게 변하고 변화 할 때 유지해야할 악몽입니다.

두 개 이상의 필드에서 고유성이 필요하면 기본 키가 필요하지 않으므로 고유 인덱스가 필요합니다. 테이블의 PK를 대리 키 (가능하면 int)로 만듭니다.

일대일 관계로 테이블을 만들려는 경우 상위 테이블의 PK를 하위 테이블의 PK로 사용하고 테이블간에 PK_FK 관계를 설정할 수 있습니다. 그러나 20 개의 분리 된 1 대 1 테이블이 필요하지는 않습니다.

+1

당신의 충고는 모순이 아닙니까? "고유 인덱스"가 필요함을 제안함으로써 복합 키 제약 조건을 그런 식으로 적용해야 함을 이해합니다. 따라서 여전히 사실상 복합 키입니다. 복합 키에는 아무런 문제가 없습니다. 좋은 키입니다. 그러나 암시 적으로 인덱스를 통하지 않고 고유 한 제약 조건 (예 : SQL UNIQUE 또는 PRIMARY KEY 제약 조건)으로 명시 적으로 만든 경우 더 좋다고 생각합니다. 그것은 문제의 DBMS가 고유 한 제약 조건을 지원한다고 가정합니다. – sqlvogel

+0

고유 인덱스가 복합 키가 아닙니다. 다른 테이블과 관련이 없으므로 KEY가 아닙니다. 복합 키를 원하지 않는 이유는 다른 테이블과 관련하여 성능을 위해 가능한 가장 작은 키가 필요하기 때문입니다. 당신은 또한 가치가 결코 변하지 않을 복합 키를 가진 극히 드문 무언가가 필요합니다. 고유 인덱스를 허용하지 않는 데이터베이스를 사용하는 것을 결코 고려하지 않습니다. 이는 실제 데이터베이스가 아닌 장난감 일뿐입니다. – HLGEM

+1

키는 "다른 테이블과 관련이있는"것이 아닙니다. 후보 키는 유일해야하며 환원 불가능하게 그렇게하는 열 속성 세트입니다. 합성 키는 둘 이상의 속성이있는 후보 키입니다. 따라서 복합 키는 효과적인 데이터베이스 설계에 필수적입니다. 그러한 키가 다른 테이블에서 참조되는지 여부는 다른 질문입니다. 또한 복합 키가 단일 속성 키보다 더 작을 수도 있습니다. 크기는 확실히 하나의 요인이지만, 유일한 것은 아니며 거의 중요하지 않습니다. – sqlvogel

0

데이터베이스가 거대하고 많은 관계가있는 것처럼 들립니다. 기본 키 상황을 단순화하기 위해 할 수있는 한 가지는 각 테이블의 기본 키로 단일 열을 정의하고 자동으로 증가하는 int 또는 guid 데이터 유형을 사용하는 것입니다. 이렇게하면 고유성을 보장 할 수 있고 외래 키는 적어도 기본 키와 독립적입니다.

+0

사용자는 내가 사용하고자하는 솔루션이 아니지만 내 요구에 맞는 유일한 옵션입니다. 다른 사용자가 작성한 인수가 맞지만 클라이언트 요구 사항에 따라 문제의 테이블 구조 (존재 여부)를 변경할 수 없습니다. 감사합니다. – user287745

0

하나의 테이블과 관계가있는 20 개의 테이블로 디자인을 시각화하는 데 문제가 있습니다.

데이터 디자인을 보지 않고도 말할 수는 없지만 관계형 데이터베이스보다는 계층 적 데이터베이스를 설계 한 것처럼 들립니다.

+0

아니요, 발생합니다. 한 번은 200 개의 테이블을 참조하는 시스템이있었습니다. CMS (Web CMS)와 하나의 테이블은 항목의 계층 구조를 유지하는 "ContentItem"이었습니다. 거의 모든 것은 "상점 아이템, 가격, 보안, 사용자 등 콘텐트 아이템"이었습니다. – TomTom

+0

@TomTom : 예, ContentItem은 룩업 테이블입니다. 그러나 20 개의 다른 테이블과의 관계에있는 테이블을 가지려면 다른 테이블이 20 개있는 외래 키가 있습니다. 이는 특이합니다. 나는 그런 디자인을 시각화 할 수 없다. –

+0

개체 계층 구조가 동일하게 보입니다. 실제로 O/R 매퍼로 작업하기가 어렵지 않습니다. ContentItem에서 상속받은 모든 것 모두가 대부분입니다. 이제 금융 응용 프로그램에서 비슷한 점이 있습니다. 표 : ops.Item - OperationsItem. 이 테이블에서 우리는 보안을 처리합니다. 따라서 많은 다른 테이블에는 "자신의"ops.Item (계정 등 - 사용자를 비롯하여 사용자를 편집 할 수있는 사용자 등)을 가리키는 키가 있습니다. – TomTom

3

"외래 키이지만 기본 키로 선언해야하는 외래 키"가 있다고 말하면 실제로 데이터베이스 디자인을 수행하는 능력과 기술 및 권한이 없음을 나타냅니다.

외래 키와 "기본"키는 아주 다른 개념으로 데이터베이스 디자인 분야에서 원격 지식이있는 사람이라면 누구나 혼동하기가 어렵습니다.

어쩌면 당신은 그것이 실제로 무엇을 의미하는지 설명하려고 시도 할 수 있습니다.

+0

+1 - "정치적으로 올바른"대신 "사실적으로 올바른"것을보기 좋게. – TomTom

관련 문제