当字段之间存在不规则关系时如何设计表

时间:2017-08-08 17:00:57

标签: sql sql-server

我想在表格中设计以下关系:

PARTNO  OEMNO
--------------    
AA1001  12345
AA1001  67890
AA1002  45678
BB1001  12345
BB1002  12345

PARTNOOEMNO之间存在不规则关系。

  • PARTNO(AA1001)可能有多个OEMNO(12345,67890)
  • PARTNO(AA1001)的替换PARTNO(AA1002)可能有不同的OEMNO(45678,12345和67890)
  • PARTNO的替换PARTNO(BB1002)(BB1001)可能拥有相同的OEMNO(12345)
  • OEMNO(12345)可能有多个PARTNO(AA1001,BB1001,BB1002)

问题:我真的很困惑如何在它们之间创建表格和关系,以便我可以选择

  • 特定PARTNO的所有OEMNO和
  • 特定OEMNO的所有PARTNO

2 个答案:

答案 0 :(得分:2)

每当你有多对多的关系时,你需要一个中间表来分解关系。这种表有许多不同的名称:例如“关联”,“桥接”,“交汇点”,“链接”。像这样:

create table parts_oems (
partno varchar (10) not null,
oemno varchar (10) not null,
constraint pk_parts_oems primary key (partno, oemno)
)

然后你将你的桌子加入任何一个部分,或者加入oems,以确定哪一个与另一个相关: -

select p.partno, count (po.partno) as oemcount
from
parts p
inner join parts_oems po on p.partno = po.partno
group by p.partno

要确定哪些oems与partno AA1001相关联,你会写: -

select p.partno, o.oemno, o.some_other_columns
from
parts p
inner join parts_oems po on p.partno = po.partno
inner join oems o on o.oemno = po.oemno
where p.partno = 'AA1001'

答案 1 :(得分:2)

您需要建立关系表。

+------+   +-----+
| PART |   | OEM |
+------+   +-----+
    \         /
   +----------+
   | PART_OEM |
   +----------+
  • PART需要一个主键,例如PART_ID
  • OEM需要小学一年级 密钥,例如OEM_ID
  • PART_OEM有两个FOREIGN KEY限制, 一个指向PART.PART_ID,另一个指向OEM.OEM_ID