我有一个名为Books的表,其中包含3列。
TableName: Books
Columns: BookId (PK), BookName, Book_Publisher_XRef_Id (FK), IsInternal
我有两个包含发布商信息的表。这两个表都有不同的列。
TableName: InternalPublishers
Columns: PublisherId (PK), PublisherName, ....
TableName: ExternalPublishers
Columns: PublisherId (PK), PublisherName, ....
我有一个链接表,其中包含哪些图书属于哪个发布者的信息。一本书可以有多个出版商。
TableName: Books_Publishers_XRef
Columns: Book_Publisher_XRef_Id (PK), PublisherId
如果我想在PublisherId上创建外键约束,我需要创建一些复合外键约束,我不确定是否可以创建。
那么在这种情况下,在Books_Publishers_XRef表中在PublisherId上实现FK的最佳方法是什么?
将Books Books_Publishers_XRef表分为2个表,一个用于内部发布者,另一个用于外部发布者,并且Books表中有2列用于Books_Internal_Publishers_XRef和Books_External_Publishesr_XRef表?
不要在Publisher_Id列上创建FK并保持设计原样吗?
通过在Books表和Books_Publishers_XRef表中添加Publisher_Type_Id列来创建复合FK,其中如果Publisher_Type_Id = 1,它属于Internal_Publishers表而Publisher_Type_Id = 2,它属于External_Publishers表? (不确定这是否可行)
其他一些架构设计?
请告知。
答案 0 :(得分:1)
请勿在两个表格中划分您的数据:InternalPublishers
,ExternalPublishers
。创建一个表并使用bit
字段来确定它们是内部还是外部。像这样:
create table Publisher
(
PublisherId int not null primary key clustered,
PublisherName varchar(100) not null,
IsInternal bit not null
)
go
这样您就可以轻松创建外键引用。毕竟,您似乎对Books
采用了相同的设计,请将其保留给发布商。
答案 1 :(得分:1)
Publisher
表中。