Sql server 外键栏问题
我正在尝试使用外键连接两个表 表1:(斑块):Sql server 外键栏问题,sql-server,Sql Server,我正在尝试使用外键连接两个表 表1:(斑块): PLAQUE_ID PLAQUE_TYPE facility_id FACILITY PLAQUE_SUB_LOCATION 2468 Lettering 26 Gorab Building DONOR WALL FRIEND LEVEL 2469 Lettering 36 abc Hospital MUSIC &
PLAQUE_ID PLAQUE_TYPE facility_id FACILITY PLAQUE_SUB_LOCATION
2468 Lettering 26 Gorab Building DONOR WALL FRIEND LEVEL
2469 Lettering 36 abc Hospital MUSIC & ENTERTAINMENT WALL
2476 Facility Plaque 46 abc Hospital 1ST FL OFFICE ROOM
表2:设施
FACILITY_ID FACILITY FACILITY_DESC PLAQUE_ID
26 Gorab Building 2468
36 abc Hospital 2469
46 abc Hospital 2476
我不希望设施表与牌匾表具有相同的行。我希望设施列中有不同的名称。我认为唯一的方法是将FACILITY
列作为plate
表的外键,但我感到困惑,因为我们可以将这样的列作为外键。我只看到ID
列作为外键。FACILITY
列中存在不同值的原因是,每一行在FACILITY\u DESC
列中都有关于该FACILITY
的大量描述
如能答复,将不胜感激 您不需要设施表中的设施ID,因为您在设施表中有一个设施ID,这足以在瘟疫和设施表之间建立联系。只需使用一个简单的连接。例如:
SELECT Plaque_ID, Plaque_Type, Facility FROM Plaque INNER JOIN Facility ON Plaque.Facility_ID = Facility.Facility_ID
我认为您应该将Facility表的Facility列设置为唯一,并删除Plate表的Facility列。记住,牙菌斑表应描述牙菌斑的性质。
还考虑添加一个新的PPLAQETYPE表,并用PraceCype表中的外键替换斑块ID的斑块类型列。
这里简单解释了如何连接表,那么为什么不直接查询
不同的
设施呢?外键只能引用目标表的主键(很可能是plate\u ID
),或者唯一索引中的任何列。由于plate
中的Facility
不是唯一的,因此您无法在其上放置唯一索引-因此您将无法使用外键引用它斑块和设施之间的关系是什么?我猜一个设施可以有任意数量的斑块,但每个斑块必须存在于一个且仅存在于一个设施中。这是正确的吗?@FreshPrinceofSO此时我正在尝试建立关系数据库,因此我需要找出方法来规范化设施表,这样,如果斑块表中有80000条记录,那么设施表中只有200个设施(不同计数)然后可以在200而不是80中输入描述,000@RBarryYoung是的,没错,我按照你的指示做了,但这给了我不同的设施行和相应的斑块id,斑块类型。但我也希望展示其他具有相同功能的斑块。我怎样才能得到那些具有相同功能的斑块。斑块表有80000行。一个牌匾只有一个设施,但一个设施有许多牌匾。所以,如何在Plate表中使用外键连接在Facility表中有不同的行。我找到了一个解决方案,只需在Plate表中使用Excel中的Vlookup生成Facility ID。具有相同名称的设施将具有相同的设施id