Это ограничивающий способ решения проблемы. Что произойдет, если вы добавите новый тип оплаты? Новая таблица поднимается, и ваше условие JOIN для всех ваших запросов, использующих заказы и типы платежей, должно быть переписано.
Если вы в будущем можете ввести больше типов платежей, подумайте о наличии единой таблицы типов платежей, в которой будут храниться тип и атрибуты платежа, которые ВСЕГДА бывают общими для всех типов платежей, а затем отдельную таблицу атрибутов, которая будет удерживаться атрибуты в строках на основе типов платежей. Таким образом, когда вы масштабируете масштаб, вы увеличиваете количество записей, а не количество объектов (таблицы и поля).
Если вы остаетесь с тем, что у вас есть, вам нужно будет либо написать номер заказа в свою таблицу «Типы платежей», чтобы вы могли присоединиться к ним, либо вам нужно будет написать Тип типа оплаты, а также Первичный ключ «Тип платежа» в таблицу заказа. Что-то вроде:
Order Number | Payment Type Type | Payment Type Key
1 PaymentType1 5
2 PaymentType2 5
3 PaymentType1 5
Тогда:
SELECT
o.Number,
COALESCE(pm1.key, pm2.key),
CASE WHEN o.PaymentTypeType = "PaymentType1"
THEN pm1.pm1_attr1
ELSE pm2.pm2.attr3
END as "Friendly Attribute Name"
FROM ORDER o
LEFT OUTER JOIN PaymentMethod1 pm1 ON
o.PaymentTypeType = "PaymentType1" AND
o.PaymentTypeKey = pm1.key
LEFT OUTER JOIN PaymentMethod2 pm2 ON
o.PaymentTypeType = "PaymentType2" AND
o.PaymentTypeKey = pm2.key
Вы можете увидеть, что может получить уродливые довольно быстро. Особенно, когда вы добавляете новый PaymentType в микс через год.
здесь таблица 'order' будет иметь соотношение 1: 1 с каждой из таблиц соединения, правильно? –
Для второго решения таблица заказов будет иметь отношение 1: 0..1 к каждой таблице соединений. –
прав, вот что я имел в виду. Я приму свой ответ. :) –