Моя (сокращенная) схема имеет (или, скорее, потребует) следующие таблицы и взаимосвязи:
Clients (ID INT PRIMARY KEY)
Files (
ID INT PRIMARY KEY,
Client INT REFERENCES Clients(ID) ON DELETE CASCADE)
Interfaces (
ID INT PRIMARY KEY,
Client INT REFERENCES Clients(ID) ON DELETE CASCADE)
Files_Interfaces (
"File" INT REFERENCES Files(ID) ON DELETE CASCADE,
Interface INT REFERENCES Interfaces(ID) ON DELETE CASCADE)
Таким образом, как видно из этой схемы, клиент может иметь несколько файлов и несколько интерфейсов.Между интерфейсами и файлами существует отношение «многие ко многим» (отсюда и таблица соединений Files_Interfaces
), и единственными иерархическими отношениями являются «Клиент» (существует отношение «один ко многим» от Clients
до Files
иInterfaces
).
Мне понадобятся эти ограничения между Files_Interfaces
и Files
и Interfaces
, чтобы при удалении файла или интерфейса все связанные ассоциации уничтожались.
Проблема в том, что SQL Server 2005 не позволяет мне иметь эту схему.Когда я пытаюсь создать Files_Interfaces с такими ограничениями, я получаю следующую ошибку:
Введение ограничения FOREIGN KEY 'FK__Files_Int__Inter__3D2915A8' в таблицу 'Files_Interfaces' может вызывать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Что дает?Это потому, что если я удаляю клиента, то и файлы, и интерфейсы удаляются, и тогда у Files_Interfaces
записей есть две веские причины исчезнуть?Если так, то почему это плохо?
Можно ли как-то предотвратить эту ошибку?