如何在sql server中映射包含约束的特化

时间:2014-03-08 17:22:09

标签: sql-server foreign-keys refer

我有两个表,'PublishedBook'和'TextBook',它们专门用于“Items”实体。 'publishedBook'和'TextBook'覆盖'items'。也没有重叠。我认为,为了说明这一点,我需要做一些不可能的事情;

create table TextBook
(

    itemNo char(5),
    semester varchar(5),
    section varchar(10),
    pYear int,
    constraint TextBookPK primary key(itemNo),
);


create table PublishedBook
(

    itemNo char(5),
    edition varchar(5),
    constraint PublishebookPK primary key(itemNo)
);

create table Item
(

    itemNo char(5) ,
    title  varchar(10),
    description varchar(100),
    constraint itemPK primary key(itemNo),
    constraint itemFK foreign key(itemNo) references PublishedBook(itemNo) 
    constraint itemFK2 foreign key(itemNo) references TextBook(itemNo)
);

使Item表的'itemNo'引用PublishedBook和TextBook的两个主键。

任何人都可以解释一下我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你正在做的是正确的,你只是在表Item的第二个约束之后缺少一个逗号:

create table TextBook
(

itemNo char(5),
semester varchar(5),
section varchar(10),
pYear int,
constraint TextBookPK primary key(itemNo),
);


create table PublishedBook
(

itemNo char(5),
edition varchar(5),
constraint PublishebookPK primary key(itemNo)
);

create table Item
(

itemNo char(5) ,
title  varchar(10),
description varchar(100),
constraint itemPK primary key(itemNo),
constraint itemFK foreign key(itemNo) references PublishedBook(itemNo) ,
constraint itemFK2 foreign key(itemNo) references TextBook(itemNo)
);

答案 1 :(得分:0)

检查约束的查询结果是什么?:

SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE constraint_name
in(
SELECT UNIQUE_CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE constraint_name in(
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE constraint_type='FOREIGN KEY'
AND TABLE_NAME='Item')
)