Правильный способ сделать этот запрос на связи таблицы? - PullRequest
0 голосов
/ 09 декабря 2011

Таблица_A

  • TA_ID
  • TA_Column
  • TA_Column
  • [...]

Table_B

  • TB_ID
  • TB_TableA_ID
  • TA_Column
  • [...]

Table_C

  • TC_ID
  • TC_TableA_ID
  • TC_TableB_ID
  • TA_Column
  • [...]

SELECT *FROM Table_C WHERE TC_TableA_ID = 1

(Да, я знаю, что «SELECT *» - это плохо; просто использую его в этом примере.)

= = = = = = = ИЛИ == = = = = =

Таблица_A

  • TA_ID
  • TA_Column
  • [...]

Table_B

  • TB_ID
  • TB_TableA_ID
  • TA_Column
  • [...]

Table_C

  • TC_ID
  • TC_TableB_ID
  • TA_Column
  • [...]

ВЫБРАТЬ * ИЗ Table_C c ВЛЕВОМ СОЕДИНЕНИЕМTable_B b ON c.TC_TableB_ID = b.TB_ID WHERE TB_TableA_ID = 1

Я использовал оба в своих проектах / кодах, но на самом деле не придерживался одного;какая из них является наиболее эффективной схемой / формой запроса?

1 Ответ

0 голосов
/ 09 декабря 2011

Отметьте меня для вашего второго варианта: присоединиться.Таблица C должна ссылаться на столбцы, к которым она имеет непосредственное отношение.Например, если:

  • Таблица C - СОТРУДНИК
  • Таблица B - ОТДЕЛ
  • Таблица A - МЕСТО *

Что происходит, когдарасположение отдела меняется?Вы обновляете таблицу Department для ссылки на новую запись Location.Но нужно ли вам просматривать все записи сотрудников и обновлять их?Будет легко представить проблемы целостности, когда вы получите два разных результата, используя два разных пути.(Где находится сотрудник? Путь 1: перейти непосредственно к местоположению, путь 2: перейти к отделу, затем местоположение).Это настоящая боль.

Если он проиндексирован правильно, производительность не должна быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...