Таблици представляват бизнес отношения/сдружения. "Relation[ship]s", които споменавате, са FK (външни ключове) и които не са необходими за заявка. Те заявяват, че стойностите на подреда за някои колони трябва също да бъдат стойности на подреда за някои ключови колони. Това, което е необходимо, е да знаете какво казва един ред за текущата бизнес ситуация, когато е в таблица. (Което, като се има предвид какви ситуации възникват, определя FKs и други ограничения.)
От Изисква се за присъединяване на 2 таблици с техните FK в 3-та маса :
Така дадено
-- rows where product [id_product] is supplied by [id_supplier] ...
ps_product(id_product, id_supplier, ...)
-- rows where carrier [id_carrier] has reference [id_reference] ...
ps_carrier(id_carrier, id_reference, ....)
пишем
ps_product s
JOIN ...
ON s.id_product = ...
...
JOIN ps_carrier c
ON ... = id_carrier
WHERE ...
за да получите редове, където
product [p.id_product] is supplied by [p.id_supplier] ...
AND ...
AND s.id_product = ...
...
AND carrier [c.id_carrier] has reference [c.id_reference] ...
AND ... = id_carrier
AND ...
Трябва да знаете предикатите на вашите таблици, след което условията JOIN заедно на таблиците ON или WHERE, така че полученият предикат да е за редовете, които искате обратно.
Има ли някакво практическо правило за конструиране на SQL заявка от четливо от човека описание?