Нужна консультация лучшего подхода, как спроектировать БД по следующему сценарию:Лучший подход каскадное удаление связанных сущности в MS SQL
После ниже DB структуры exmaple (это не реально просто объяснить проблему)
File
(
Id INT PRIMARY KEY...,
Name VARCHAR(),
TypeId SMALLINT,
...
/*other common fields*/
)
FileContent
(
Id INT PRIMARY KEY...,
FileId FOREIGN KEY REFERENCES File(Id) NOT NULL ON DELETE CASCADE UNIQUE,
Content VARBINARY(MAX) NOT NULL,
)
Book
(
Id INT PRIMARY KEY...,
Name VARCHAR(255),
Author VARCHAR(255)
...
CoverImageId FK REFERENCES File(Id),
)
BookPageType
(
Id TINYINT PRIMARY KEY...,
Name VARCHAR(50),
)
BookPage
(
Id INT PRIMARY KEY...,
TypyId TINYINT FOREIGN KEY REFERENCES BookPageType(Id),
BookId INT FOREIGN KEY REFERENCES Book(Id) ON DELETE CASCADE,
Name VARCHAR(100),
CreatedDate DATETIME2,
...
/*other common fields*/
)
BookPage1
(
Id PRIMARAY KEY REFERENCES BookPage(Id) NOT NULL ON DELETE CASCADE,
FileId PRIMARAY KEY REFERENCES File(Id)
...
/* other specific fileds */
)
...
BookPageN
(
Id PRIMARAY KEY REFERENCES BookPage(Id) NOT NULL ON DELETE CASCADE,
ImageId PRIMARAY KEY REFERENCES File(Id),
...
/* other specific fileds */
)
Теперь вопрос заключается в том, что я хочу удалить книгу со всеми страницами и данными (и это хорошо работает с удалением каскада), но как сделать каскад также удалять связанные файлы (от 1 до 1 relentionship). Здесь я вижу следующие подходы:
- Добавить файл в каждую таблицу, когда я использую его, но я не хочу, чтобы скопировать файл схемы для каждой таблицы
- Добавить внешние ключи таблицы файлов (вместо например, например), но поскольку я использую файл, например в 10 таблицах у меня будет 10 внешних ключей в таблице файлов. Это тоже не хорошо
- Используйте триггеры, что я не wnat делать
Заранее спасибо
Если у вас есть отношения между 1 и 1 файлом и книгой, зачем нужна таблица файлов? –
Используется также в других таблицах (в Pages for eample). Книга имеет обложку, но страницы в книге могут иметь и другие изображения, логотип, вложения и т. Д. (Обычно это от 1 до 1 повторного использования, один логотип на странице) – vitaly
При разработке баз данных вы не можете продолжать обычно. Если вы создадите его как 1 к 1, у вас есть только этот параметр. Так что это? От 1 до 1 или от 1 до многих или многих. Может ли такое же изображение быть на нескольких страницах? Может ли данная страница иметь несколько изображений? у вас действительно есть отдельная таблица для каждой страницы? – jmarkmurphy