У меня есть следующие три таблицыSQL таблицы и соотношение дизайн
Deliveries
DeliveryID A1
-----------|----|
1 | 01 |
2 | 01 |
3 | 02 |
JobLinks
LinkID DeliveryID A1 JobID
------|------------|-----|------|
1 | Null | 01 | 1 |
2 | 3 | Null| 2 |
Jobs
JobID
-------|
1 |
2 |
Таким образом, знания, полученные в том, что работы 1 для поставок 1 и 2, и Иов 2 для доставки 3.
запрос, который демонстрирует это,
SELECT Deliveries.DeliveryID,
Jobs.JobID
FROM Deliveries
JOIN JobLinks
ON JobLinks.DeliveryID = Deliveries.DeliveryID
OR JobLinks.A1 = Deliveries.A1
JOIN Jobs
ON Jobs.JobID = JobLinks.JobID
Это вернет каждую доставку и связанную с ним работу
DeliveryID JobID
-----------|-----|
1 | 1 |
2 | 1 |
3 | 2 |
Проблема, которую я вижу, заключается в том, что Delivery.A1 не является уникальным полем. Его можно изменить после создания записи поставки. Это означало бы, что я буду потенциально обновлять таблицу JobLinks всякий раз, когда это поле будет изменено. Для меня это кажется плохим дизайном. Как я могу конструировать эти отношения, чтобы избежать этого?
Вы можете поместить триггер на Поставки, чтобы в любое время A1 обновлялся в Поставок, он получает аналогичное обновление в JobLinks. –
Полезно ли использовать триггеры для поддержания связей в таблице? Я чувствую, что производительность может ухудшиться, поскольку эти таблицы становятся все больше и больше. Я могу легко перестроить структуру отношений. – myacobucci
Мне кажется, что таблица доставки может быть удалена, если delivery_id и A1 больше не могут быть опущены. Если в таблице поставок содержится больше информации (которая не видна), удалите поле A1 в таблице JobLinks и убедитесь, что значение delivery_id больше недействительно. Если A1 изменяется в любом случае, вам нужно только изменить его в одном месте. – CSS