Sql server 具有同时作为PK和FK的列的SQL Server

Sql server 具有同时作为PK和FK的列的SQL Server,sql-server,foreign-key-relationship,Sql Server,Foreign Key Relationship,我没有做太多的数据库设计工作,我正在四处寻找一些例子。 虽然我知道主键和外键的区别,但有一件事让我措手不及,那就是即使一个表有主键,并且在另一个表中用作外键,因为我使用了GUI SSMS工具,我注意到有时我最终会遇到这个问题 PhoneID (PK, int, not null) 而我的用户表 UserId(PK,FK, int, not null) 这两个表中的主键都是这些ID,其他表中还有外键,但为什么其中一个表中有“PK,FK”显然是我无意中创建的,但应该是这样吗 是的,这完全有可

我没有做太多的数据库设计工作,我正在四处寻找一些例子。 虽然我知道主键和外键的区别,但有一件事让我措手不及,那就是即使一个表有主键,并且在另一个表中用作外键,因为我使用了GUI SSMS工具,我注意到有时我最终会遇到这个问题

PhoneID (PK, int, not null) 
而我的用户表

UserId(PK,FK, int, not null) 
这两个表中的主键都是这些ID,其他表中还有外键,但为什么其中一个表中有“PK,FK”显然是我无意中创建的,但应该是这样吗


是的,这完全有可能。表的主键也可以是引用另一个表的外键

对你来说,我不太确定你做了什么。您可以检查约束以查看
UserId
列引用的是哪一列


另外需要注意的是,简单地向表添加外部引用并不会隐式地使该列成为另一个表上的外键。例如,仅因为您将
FK_PhoneTypeID
添加到
Phone
表中,SQL Server不会自动将
PhoneTypeID
列设置为FK。在您的语句中的某个地方,您可能对其他列进行了赋值,甚至对自己进行了赋值。

主键也可能同时是外键

但看看你的数据库设计,在你的情况下,我不认为这是故意的,这是错误的。如果这不是错误的,那么你需要修复它

dbo.PhoneType
表中,
PhoneTypeID
列需要是主键,而不是外键。我猜这是错误的,您想在
dbo.Phone
表的
PhoneTypeID
列中创建外键,引用
dbo.PhoneType
表中的
PhoneTypeID
列。但最终您会在dbo.Phontype表的主键列上创建一个外键约束

这种设计与约束相矛盾

简而言之:
dbo.PhoneType(PhoneTypeID)
上的外键约束强制要求在dbo.PhoneType表中不能有PhoneTypeID,除非它存在于dbo.Phone表的PhoneTypeID列中

另一方面,
dbo.Phone(PhoneTypeID)
上的外键约束强制要求dbo.Phone中不能有PhoneTypeID,除非它存在于dbo.PhoneType(PhoneTypeID)中

dbo.Users表中的UserID列也是如此

解决方案

您需要删除以下约束以使其正常工作

1) 在dbo.PhoneType表中,删除外键约束引用 dbo.phone表中的PhoneTypeID列

2) 在dbo.Users表中,删除删除外键约束引用 dbo.phone表中的UserID列