关于数据库表的主键外键问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 01:26:08
我有两张表:员工(员工id,推荐人id,店号,关联店号)员工为主键,店(店号,地址)店号为主键
我有两个问题:
1:根据实际情况,推荐人可以没有,但是如果有的话必须是某一个员工id,我再sqlserver中建立员工表自身的外键不行,报错,ALTER TABLE 语句与 COLUMN FOREIGN KEY SAME TABLE 约束 'FK_员工_员工' 冲突。该冲突发生于数据库 '员工筹薪计算',表 '员工', column '员工id。难道表自身不能建立外键吗?
2:员工中的店号字段,和关联店号字段都是店表的外键,引用店表的店号,但是实际操作中我只能建立一个外键,第二个就报错,为什么?ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 'FK_员工_店2' 冲突。该冲突发生于数据库 '员工筹薪计算',表 '店', column '店号'。

谢谢大家!!
谢谢你的回答,我要补充问题:
对于第二个问题:
如:员工表中的一条记录("00005","00001","B-1","B-2")
员工id为"00005",他的推荐人为"00001",他的店号为"B-1",而与他关联(某种关系)的店号为"B-2",实际情况中确实是这样呀,他自己的店,和关联的店必须是店表里的主键,或者为空,这不正是外键的性质吗?其中店号与关联店号不存在不一致的问题,因为实际情况中就是不相同的。
在说第一个问题,例子还是上面的记录:("00005","00001","B-1","B-2"),他的推荐人确实必学是员工表中的主键的某一项,如果表自身不能建立外键的话,请问这个问题我该如何解决?在数据变更时加一个触发器,去检查输入的推荐人是否为员工表的id字段的某一项?

你的要求是完全可以实现的,可能在建立时方法或者语法有点小问题,请确认下。

如下是我在SQL Server 2005安照你的要求建立数据表时用到的语法:
---------------------------------------------------------------
/*创建商店*/
CREATE TABLE [dbo].[Store](
[Id] [char](10) NOT NULL, --编号
[Address] [nvarchar](100) NULL, --地址
CONSTRAINT [PK_Store] PRIMARY KEY CLUSTERED
(
[Id] ASC --建立主键
)
) ON [PRIMARY]

GO
/*创建员工*/
CREATE TABLE [dbo].[Employee](
[Id] [char](10) NOT NULL, --编号
[RecId] [char](10) NULL, --推荐人编号
[Store] [char](10) NULL, --商店编号
[RelStore] [char](10) NULL,--关联商店编号
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
(
[Id] ASC --建立主键
)
) ON [PRIMARY]

GO

/*推荐ID和员工ID建立外键约束*/
ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Employee] FOREIGN KEY([RecId])
REFERENCES [dbo].[Employee] ([Id])
GO
ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_Employee