外键列问题

时间:2013-05-13 18:47:26

标签: 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 & 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表与Plaque表具有相同的行。我想在设施专栏中有不同的名字。我认为唯一的方法是将FACILITY列作为Plaque表的外键,但我感到困惑,因为我们可以将这样的列设为外键。我只看到ID列作为外键。 FACILITY列中不同值背后的原因是因为每一行都会对FACILITY列中的FACILITY_DESC有大的描述。

非常感谢答案。

1 个答案:

答案 0 :(得分:1)

您不需要Facility表中的PLAUQUE_ID,因为您在Plaque表中有一个facility_id,这足以在Plague和Facitlity表之间建立连接。只需使用简单的连接即可。例如:

SELECT Plaque_ID, Plaque_Type, Facility FROM Plaque INNER JOIN Facility ON Plaque.Facility_ID = Facility.Facility_ID 

我应该将Facility表的Facility列设置为唯一,并删除Plaque表的Facility列。请记住,斑块表应描述斑块属性。 还要考虑添加一个新的PlaqueType表,并将Plaque id的Plaque Type列替换为PlaqueType表的相应外键。

以下是如何连接表http://www.w3schools.com/sql/sql_join_inner.asp

的简单说明