Каковы последствия не проверки существующих данных при добавлении внешнего ключа? - PullRequest
1 голос
/ 07 мая 2010

Я унаследовал базу данных, которая не совсем стремится к целостности данных. Я пытаюсь добавить некоторые внешние ключи, чтобы изменить это, но в некоторых таблицах есть данные, которые не соответствуют ограничениям. Скорее всего, данные больше не будут использоваться, поэтому я хочу знать, с какими проблемами я могу столкнуться, оставив их там. Другой вариант, который я вижу, - переместить его в какую-то таблицу без ссылочных ограничений, просто для исторических целей.

Итак, каковы последствия не проверки существующих данных?

Если я создаю ограничение внешнего ключа для таблицы и не проверяю существующие данные, будут ли применены все новые данные, вставленные в таблицу?

Edit: Я действительно говорю об использовании опции WITH NOCHECK при создании внешнего ключа.

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Как я понимаю, вам будет не хуже, если вы сделаете это, если оставите это в покое, так как неверные данные все еще будут в вашей базе данных - если эти данные не подлежат изменению. Он проверит данные с этого момента. Таким образом, вы уверены, что будущие данные верны.

Однако, если какие-либо данные в неверных записях могут измениться, у вас возникнет проблема, поскольку она не допустит изменения, поскольку проверка FK не удастся. Если дело обстоит именно так, и вы не можете очистить неверные данные, лучше всего исправить данные как можно лучше, связав их с родительской записью, которая по сути называется «Неизвестно». Таким образом, если родительская таблица является клиентом, и вы больше не можете сказать, кто был клиентом, поскольку клиент, связанный с подробной записью, был удален без проверки записей FK, затем вставьте запись клиента, в которой имя клиента равно «Неизвестно», и измените клиента ID для идентификатора этой записи.

0 голосов
/ 07 мая 2010

Ограничение внешнего ключа не должно быть создано, если оно будет нарушено существующими данными. Система проверит вас. Что вам нужно сделать, это создать столбец для использования во внешнем ключе, указать каждую строку на существующей записи (это может быть даже одна «фиктивная» запись, на которую вы указываете, с которой связаны устаревшие данные или данные преобразования), заполнив этот столбец , затем создайте FK.

...