交汇处/多对多关系

时间:2016-08-05 14:54:38

标签: sql sql-server sql-server-2008

我有以下表格

表1:机器清单

machinename       (PK,ncarchar(10),not null)
machine_id        (computed,nvarchar(2),null)

表2: JDEPARTIMGLU

ndx_jde_part_img  (pk,int,not null)
jde_part_num      (varchar(20)null)

- ....(更多专栏)

我想在machinenamejde_part_num之间建立多对多的关系。我想我需要使用联结表来执行此操作。我尝试使用table1中的machinename和table2中的jde_part_num,但我在设置FK时遇到了问题。

我不确定自己是否走在正确的轨道上,是否有人可以帮助我指导我如何做到这一点?

我将在许多机器和许多使用相同部件的机器上使用许多部件

3 个答案:

答案 0 :(得分:1)

是的,你需要第三张表machine_parts

machinename       FK   (machinelist)
ndx_jde_part_img  FK   (JDEPARTIMGLU)

因此,如果您有一台机器可以找到它使用的所有部件。如果你有一个零件可以找出哪些机器需要它。

答案 1 :(得分:1)

您必须在联结表上使用两个PK

CREATE TABLE Junction
(
  machinename       nvarchar(10) not null,
  ndx_jde_part_img  int not null,
  PRIMARY KEY (machinename,ndx_jde_part_img),
  CONSTRAINT fk_machines FOREIGN KEY (machinename) REFERENCES machinelist(machinename),
  CONSTRAINT fk_parts FOREIGN KEY (ndx_jde_part_img) REFERENCES JDEPARTIMGLU(ndx_jde_part_img)
);

您甚至可以在此表中添加一些新列,例如该计算机上所需的部件数量。

答案 2 :(得分:0)

我将Machine_ID INT作为PK添加到第一个表格,然后在第3个表格中使用Machine_ID INTndx_jde_part_img INTQuantity DECIMAL。然后为该表构建FK。