我想在Postgresql中创建关系,允许我拥有'替代'部分。例如,id为1,2和4的部分是替代品。
执行此操作的一种方法是设置sub_id字段并使用替换部分的id填充该字段。但是从下面的数据集中可以看到一个简单的查询:
SELECT *
FROM part
WHERE sub_id = 1
不会返回AA部分的所有替代部分(部分A2将被遗漏)。我如何确保所有替代零件都能满足?
我知道如果A2的sub_id是1,那么一切都会好的。但是,在实际使用中,用户最终可能会犯错,并且会返回错误的结果。
id part sub_id
1 AA 1
2 A 1
3 B NULL
4 A2 2
答案 0 :(得分:1)
您可以尝试不同的方法。
我不知道你的需求是什么,但这是一个普遍的想法:
设置一个定义零件“组”的表:
partgid, part type, partg name
1 A Engine for A319
2 B Wheel for A319
代码:
Create Table partgroup
(
partgid int,
parttype text,
partgname text
);
然后定义组中的部分:
partid partgid partname manufacturerid
12 1 Engine X319 800
13 1 Engine XL319 800
14 1 Engine XFR319 784
15 2 Wheel F1111 341
代码:
Create Table parts
(
partid int,
partgid int,
partname text,
manufacturerid int
);
然后您可以通过简单查询访问特定组中的所有部分:
按ID:
select *
from parts
where partgid='ID'
按名称:
select *
from parts
left join partgroup on (partgroup.partgid=parts.partgid)
where partgroup.parttype= 'TYPE NAME'