Pregunta

I have not done much database design work and I was searching around for some example. While I know the difference from a primary and foreign key, one thing that caught be off guard was that even if a Table has a primary key and is used as a foreign key in another table, as I was used the GUI SSMS tools, I noticed that I sometime end up having this

PhoneID (PK, int, not null) 

While my User table

UserId(PK,FK, int, not null) 

BOTH of these tables have these ID's as primary keys in those tables, along with foreign keys in other tables, but why does one of them have "PK,FK" obviously I accidentally created it, but should it be like that?

enter image description here

¿Fue útil?

Solución

It is Possible for a Primary key to be a Foreign Key as well at the same time.

But looking at you database design, In your case I dont think it was intentional it was done by mistake. And if it wasnt done by mistake then you need to fix it.

In your dbo.PhoneType Table the column PhoneTypeID needs to be a Primary key only not a Foreign key. My guess is this was done by mistake, you wanted to create a Foreign key in your dbo.Phone table on column PhoneTypeID referencing PhoneTypeID column in dbo.PhoneType table. But somehow you end up create a foreign key constraint on the Primary key column of the dbo.Phontype table.

This Design contradicts constraints.

In simple english : The foreign Key Constraint on your dbo.PhoneType(PhoneTypeID) enforces that you cannot have a PhoneTypeID in dbo.PhoneType table unless it exists in PhoneTypeID column of dbo.Phone table.

On the other hand Foreign Key Constraint on dbo.Phone(PhoneTypeID) enforces that you cannot have a PhoneTypeID in dbo.Phone unless it exists in dbo.PhoneType(PhoneTypeID).

and same is true for the UserID column in dbo.Users table.

Solution

You need to drop the following Constraints to make it work properly.

1) In dbo.PhoneType table Drop Foreign key constraint referencing PhoneTypeID column in dbo.phone table.

2) In dbo.Users Table drop the Drop Foreign key constraint referencing UserID column in dbo.phone table.

Otros consejos

It's entirely possible, yes. A primary key of a table could also be a foreign key referencing another table.

In your case, I'm not exactly sure what you did. You can check the constraints to see which column the UserId column is referencing.

As an additional note, simply adding a foreign reference to a table does not implicitly make that column a foreign key on another table. For example, just because you add FK_PhoneTypeID to the Phone table, SQL Server does not automatically make PhoneTypeID column in the PhoneType table a FK. In your statements, somewhere, it's possible that you made assignments to other columns, or even to themselves.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top