SQL Server - добавить отношение внешнего ключа - PullRequest
0 голосов
/ 13 декабря 2011

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

Как это изменение влияет на существующую базу данных?Нужно ли ядру базы данных выполнять дополнительную работу с существующими данными в базе данных?Может ли это изменение быть «критическим», если у вас уже есть приложение, использующее текущую схему базы данных?

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Действительно, есть некоторая дополнительная работа (хотя и очень минимальная, в зависимости от вашего сервера базы данных) для обеспечения ссылочной целостности. На практике, влияние на производительность почти никогда не бывает таким, как вы заметили.

Это может быть «критическое изменение» - ваш клиентский код может вставлять данные, которые не соответствуют ссылочным ограничениям. Если БД позволила вам создать ограничения в первую очередь, это маловероятно, но это возможно.

1 голос
/ 13 декабря 2011

Вы можете указать WITH NOCHECK при создании ограничения внешнего ключа:

Опция WITH NOCHECK полезна, когда существующие данные уже соответствуют новое ограничение FOREIGN KEY или когда бизнес-правило требует ограничение должно применяться только с этого момента.

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

1 голос
/ 13 декабря 2011

Если вы добавили ссылочное ограничение, то база данных сохранит это ограничение и обеспечит его поддержание.Например, если таблица A имеет внешний ключ, ссылающийся на таблицу B, вы не можете вставить в таблицу A строку, которая ссылается на ключ, которого нет в таблице B.

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