ПРИСОЕДИНЯЙТЕСЬ без ключей? - PullRequest
1 голос
/ 17 декабря 2010

в T-SQL (SQL Server 2008), технически правильно ли ВНУТРЕННЕ СОЕДИНИТЬ две таблицы через столбцы без ключа (без связей)?Спасибо.

Ответы [ 4 ]

4 голосов
/ 17 декабря 2010

Да. Я часто присоединяюсь к дочернему столу в обход «среднего» стола.

Внешние ключи являются ограничением для целостности данных: ничего общего с формулировкой запроса. Вы должны иметь их в любом случае, если вы не заботитесь о качестве и целостности данных.

2 голосов
/ 17 декабря 2010

Вы можете присоединиться к любым двум полям, которые имеют одинаковые данные (и они также должны иметь одинаковый тип данных). Если поля проиндексированы, у вас также не должно быть проблем с производительностью, если вы не объединяете два поля varchar (4000). Возможно, вам даже потребуется сделать это, если у вас плохой дизайн базы данных и один столбец служит более чем одной цели, особенно если вы использовали модель EAV.

Однако в этом сценарии вы не получите целостность данных. Без внешнего ключа для обеспечения соблюдения правил вы можете обнаружить, что в связанной таблице есть значения, которые не соответствуют родительской таблице. Это может привести к тому, что записи не будут видны в запросах, которые должны просматриваться, или записи, которые не могут быть правильно интерпретированы. Поэтому рекомендуется устанавливать внешние ключи там, где они применимы.

1 голос
/ 17 декабря 2010

Технически это будет работать.Никаких проблем там нет. Однако иногда генератор планов запросов будет использовать FK, чтобы лучше использовать индексы.Но с точки зрения дизайна это не такая уж хорошая идея.Вы должны использовать как можно больше FK, особенно если вы хотите пройти маршрут ORM.

1 голос
/ 17 декабря 2010

Это будет работать, хотя, возможно, и не очень эффективно ... Вы должны определенно создать внешние ключи, если можете.

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