각 항목에 몇 가지 다른 테이블과의 외래 키 관계 가능성이있는 언어 매핑 테이블이 있습니다. 이 구성을 처리하는 가장 좋은 스키마는 무엇입니까?외래 키 여러 테이블 중 하나와의 관계
테이블 : LanguageMap, TableA의, TableB의
이있는 두 가지 가능성 :
1. 조회 열 방법 - 아니 외래 키 제약 조건 :
Create Table LanguageMap (
Id int not null primary key,
Language nvarchar not null,
Value nvarchar not null,
Type nvarchar not null, -- 'TableA', 'TableB', etc.
ForeignTableId int not null -- Is Foreign key to another table dependent on the type of the row.
)
2 복수의 외래 키 열
,210create Table LanguageMap(
Id int not null primary key,
Language nvarchar not null,
Value nvarchar not null,
Type nvarchar not null, -- 'Activity', 'Verb', etc.
TableAId int null,
TableBId int null
)
alter table LanguageMap add constraint FK_LanguageMap_TableA
foreign key (TableAId) references TableA (Id)
alter table LanguageMap add constraint FK_LanguageMap_TableA
foreign key (TableBId) references TableB (Id)
alter table LanguageMap add constraint CK_LanguageMap_OneIsNotNull
check (TableAId is not null or TableBId is not null)
go
alter table LanguageMap add constraint CK_LanguageMap_OneIsNull
check (TableAId is null or TableBId is null)
go
외부 키 제약은 "공유가 기본 키"라는 또 다른 대안은있다 Foreign Key for either-or column?
TableA 및 TableB에 저장된 내용을 명확히하기 위해 약간의 샘플 데이터를 표시 할 수 있습니까? 그것들은 서로 같은 스키마를 가지고 있는가? 또한 당신이 링크하는 테이블이 2 개 밖에 없거나이 질문의 목적 상 2 개로 제한되어 있습니까? – Tanner
나는 여전히 스키마를 작성하고 있으므로 얼마나 많은 테이블이 있는지 확실하지 않습니다. 그러나 스키마가 근본적으로 다르고 최소한 테이블 4 개, 즉 TableA, TableB, TableC, TableD가있을 것이라고 가정합니다. 아마도 더. 샘플 데이터는 왜 관련이 있습니까? – Rafi
스키마/데이터가 테이블에서 유사하면 해결하려고했습니다. – Tanner