Удаление связей
Применимо к:
SQL Server Analysis Services Azure Analysis Services
Fabric/Power BI Premium
Удалять существующие связи можно с помощью конструктора моделей в представлении диаграмм или диалогового окна «Управление связями». Сведения об использовании связей в табличных моделях см. в разделе Связи.
Рекомендации по удалению связей
Принимая решение об удалении связи, необходимо учитывать следующие моменты.
- Отменить удаление связи невозможно. Можно создать связь повторно, но это действие потребует полного пересчета формул в модели. Таким образом, перед удалением связи всегда нужно сначала проверить, не используется ли она в формулах.
- Удаление связи между двумя таблицами может привести к ошибкам в формулах, которые ссылаются на данные таблицы.
- Функция выражений анализа данных (DAX) RELATED использует связи между таблицами для поиска связанных значений в другой таблице. После удаления связи она будет возвращать другие результаты. Дополнительные сведения см. в описании функции RELATED (DAX).
- Помимо изменения результатов сводной таблицы и формулы, операции создания и удаления связей приводят к пересчету книги, что может занять некоторое время.
Удаление связей
Удаление связи с помощью представления диаграммы
- В SQL Server Data Tools откройте меню Модель, выберите пункт Представление модели и выберите пункт Представление диаграммы.
- Щелкните правой кнопкой мыши линию связи между двумя таблицами и выберите команду Удалить.
Удаление связи с помощью диалогового окна «Управление связями»
- В SQL Server Data Tools откройте меню Таблица и выберите пункт Управление связями.
- В диалоговом окне Управление связями выберите связи из списка. Чтобы выбрать несколько связей, щелкните каждую из них, удерживая нажатой клавишу CTRL.
- Нажмите кнопку Удалить связь.
- В диалоговом окне Управление связями нажмите кнопку Закрыть.
Удаление связей внешнего ключа
Ограничение внешнего ключа в SQL Server можно удалить с помощью SQL Server Management Studio или Transact-SQL. При удалении ограничения внешнего ключа удаляется требование принудительного создания ссылочной целостности.
Ссылки на внешние ключи в других таблицах см. в разделе «Ограничения первичного и внешнего ключа».
Разрешения
Требуется разрешение ALTER на таблицу.
Использование SQL Server Management Studio
Удаление ограничения внешнего ключа
- Разверните в обозревателе объектовтаблицу с ограничением, после чего разверните узел Ключи.
- Щелкните правой кнопкой мыши ограничение и нажмите кнопку «Удалить«.
- В диалоговом окне «Удалить объект» нажмите кнопку «ОК«.
Использование Transact-SQL
Удаление ограничения внешнего ключа
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO ALTER TABLE dbo.DocExe DROP CONSTRAINT FK_Column_B; GO
Дополнительные сведения см. в разделе ALTER TABLE (Transact-SQL).
Следующие шаги
- Инструкция ALTER TABLE (Transact-SQL)
- sys.key_constraints (Transact-SQL)
- Создание связей по внешнему ключу
- Изменение связей по внешнему ключу
Ссылочная целостность: внешний ключ (FOREIGN KEY) стр. 3
Для удаления ограничения также используется оператор ALTER TABLE :
Вот где нам понадобилось имя ограничения! Давайте удалим внешний ключ из таблицы PC.
Примечание:
При удалении внешнего ключа сами столбцы не удаляются, удаляется лишь ограничение. Это также справедливо и для других ограничений.
Создадим теперь новое ограничение, использующее каскадное удаление:
4. Изменение значений столбцов в главной таблице, с которыми связан внешний ключ в подчиненной таблице, т.е. тех столбцов, которые указаны в предложении REFERENCES ограничения FOREIGN KEY . Здесь действуют те же варианты, что и в случае с удалением строки из главной таблицы, только опция вводится предложением
При помощи внешнего ключа, как и других ограничений, мы моделируем связи, которые существуют в предметной области. Поэтому выбор опций определяется именно предметной областью. В нашем случае при изменении номера модели в таблице Product естественно создать ограничение с опцией CASCADE , чтобы это изменение проникало в продукционные таблицы, удаляя изделия аннулированной модели, т.е. для таблицы PC нам следует написать:
Однако для другой предметной области каскадное удаление может привести к ошибочной потере данных. Пусть, например, для таблиц Сотрудники и Отделы существует связь по номеру отдела. Если при удалении (расформировании) отдела сотрудники не увольняются, а переводятся в другие отделы, то каскадное удаление ошибочно привело бы к удалению информации о сотрудниках, работавших в этом отделе. Здесь подошел бы вариант NO ACTION – чтобы сначала распределить сотрудников по другим отделам, а потом удалить «пустой» отдел; или вариант SET NULL, т.е. сначала удаляем отдел, а потом занимаемся трудоустройством сотрудников, не приписанных ни к какому отделу. Еще раз повторю, что выбор варианта зависит не от предпочтений программиста, а от процессов, имеющих место в реальном мире.
1. Между таблицами Product и PC выше мы реализовали связь «один ко многим». Связь «один к одному» создается в случае, когда в подчиненной таблице внешним ключом является уникальный столбец или уникальная комбинация столбцов. В ряде случаев связь «один к одному» является ошибкой проектирования, поскольку фактически одна сущность разбивается на две. Однако для такого разделения иногда имеются веские основания, например, когда с целью повышения производительности или обеспечения безопасности приходится выполнить вертикальное секционирование (partitioning) таблицы.
2. При удалении ограничения необходимо знать его имя. Однако, как мы уже знаем, можно создать ограничение, не давая ему имени. Как быть в этом случае? Если мы явно не указываем имя ограничения, его генерирует система. Поэтому имя всегда есть. Другой вопрос, что мы его не знаем. Тут уместно сказать, что в реляционных системах метаданные хранятся так же, как и данные, т.е. в таблицах. Стандартным представлением метаданных является информационная схема, к которой можно адресовать обычные запросы на выборку. Не углубляясь в детали, напишем запрос, который вернет нам имя ограничения внешнего ключа для таблицы PC:
Как удалить связь между таблицами sql



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required