Я использую SQlServer 2008, и ниже приведен фрагмент некоторых таблиц:
Пользователи
Id (PK)
UserItems
UserId (PK)
ItemId (PK) - (составной ключ из 2 столбцов)
...
UserItemVotes
UserId (PK)
ItemId (PK)
VoterId (PK) - (составной ключ из 3 столбцов)
У меня определены следующие отношения:
- User.Id -> UserItems.UserId
- (UserItems.UserId, UserItems.ItemId) -> (UserItemVotes.UserId, UserItemVotes.ItemId)
- UserId.Id -> UserItemVotes.VoterId
Теперь у меня возникла проблема при включении каскадного удаления. При добавлении 3-го отношения я получаю ошибку «... может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, или измените другие ограничения FOREIGN KEY».
Я действительно не хочу этого делать, в идеале, если пользователь будет удален, я хотел бы удалить его элемент пользователя и / или его голоса.
Это плохой дизайн? Или есть способ получить поведение, которое я хочу от SQL Server?