我想在表格中设计以下关系:
PARTNO OEMNO
--------------
AA1001 12345
AA1001 67890
AA1002 45678
BB1001 12345
BB1002 12345
PARTNO
和 OEMNO
之间存在不规则关系。
- PARTNO (AA1001) 可能有多个 OEMNO (12345, 67890)
- 零件编号 (AA1001) 的替换零件编号 (AA1002) 可能具有不同的 OEMNO(45678、12345 和 67890)
- 零件编号 (BB1001) 的替换零件编号 (BB1002) 可能具有相同的 OEMNO (12345)
- OEMNO (12345) 可能有多个 PARTNO(AA1001、BB1001、BB1002)
问题:我真的很困惑如何创建表以及它们之间的关系,以便我可以选择
- 特定零件编号的所有 OEMNO 和
- 特定 OEMNO 的所有 PARTNO
最佳答案
每当您有多对多关系时,您都需要一个中间表来分解该关系。这种表有许多不同的名称:例如“关联”、“桥接”、“连接”、“连接”。像这样的事情:
create table parts_oems (
partno varchar (10) not null,
oemno varchar (10) not null,
constraint pk_parts_oems primary key (partno, oemno)
)
然后将表连接到任一部件或 OEM,以确定每个部件与另一个部件关联:-
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
要确定哪些 OEM 与零件号 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'
关于sql - 当字段之间存在不规则关系时如何设计表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574092/