用SQL Server2005建表时,可否建一个只有外键没有主键的表?这样的表式符合规范的吗?

如题所述

第1个回答  2012-03-19
外键就是使多表间关联,不能只有外键而没有参照的主键。

而一个字段可以在一张表中既做主键,又做外键。比如课程表里的外键先修课号,正是参照与课程表的主键课程号。所以课程表里的主键字段,同时做了该表的外键。追问

我明白你所说的,关键是,我在想,A表的主键可否在做B表的外键之时也做B表的主键呢?如果不行,那遇到这种两个表之间相关联且具有相同部分的主键时,应该如何操作?

追答

要么把Pa_info分成两个表,两个字段分别做主键。
要么让Pr_info表中的PA_ID和FA_ID联合做主键。

如果你的关系模式够规范化,就不会出现这种问题。

追问

看来是我建表之前的构思就出问题了,谢谢提醒!

追答

我本身没看清你的句子,外键的语法你就不对,怎么可能建成功呢?
你的代码改进后:
CREATE TABLE Fr_info(Rfid Varchar(20) NOT NULL Primary Key ,Fa_id int FOREIGN KEY REFERENCES Pa_info(Fa_id),Pa_id int FOREIGN KEY REFERENCES Pa_info(Pa_id))

追问

谢谢,明白了!O(∩_∩)O~

第2个回答  2012-03-19
建立的话,可以建立,规范的化应该不符合。你可以先了解下约束。追问

那这个外键我可以同时使他作为该表的主键吗?

追答

不可以哦。有代码嘛看看嘞

追问

已建表:CREATE TABLE Pa_info
(
Pa_id int NOT NULl ,
Fa_id int NOT NULL,
Pname Varchar(20) NOT NULL,
Parea int NOT NULL,
Primary Key(Pa_id,Fa_id)
)

我想要建的表:
(1)CREATE TABLE Fr_info
(
Rfid Varchar(20) NOT NULL Primary Key ,
Fa_id int NOT NULL REFERENCES Pa_info(Fa_id),
Pa_id int NOT NULL REFERENCES Pa_info(Pa_id)
)
/*失败*/

追答

报的什么错
呃。看出来了啊。
你的Fa_id 又不是Pa_info的主键,那肯定建立外键不行的啊
不然的话, 你把pa_info分成2张表吧。就有2个主键了,就应该满足你的需求了

追问

Fa_id和Pa_id共同组成Pa_info的主键,这样也不行吗???

另外:
我还想建立这样一张表:
CREATE TABLE Sa_info
(
Rfid Varchar(20) NOT NULL Primary Key REFERENCES Fr_info(Rfid),
Sa_num int NOT NULL
)
这里假设Fr_info已经成功建立,并且只有唯一的主键Rfid,你认为可以建表成功吗?我感觉不行,外键和主键不能为同一个字段。。。

本回答被提问者采纳
相似回答