У меня есть 3 таблицы: книга, раздел и содержание.Я хочу добавить отношение многие ко многим между Разделом и Контентом.Таблицы разделов и содержимого имеют столбец PageNo.Страница может иметь много содержимого и много разделов.Вкратце:
Book 1----* Section (on BookId)
Book 1----* Content (on BookId)
Section *-----* Content (on PageNo)
PageNo не уникален для таблиц разделов и содержимого.Поэтому я не могу добавить внешний ключ для PageNo в Sql Server.
Я попытался создать таблицу соединений следующим образом:
SectionContent: [SectionId, ContentId]
И я добавил FK для этой таблицы соединений.Таким образом, структура сущностей может понимать таблицу соединений и устанавливать отношения «многие ко многим» в SectionId и ContentId.Но каждый раз, когда мне нужно вставить один из Разделов или Таблицу содержимого, я должен также вставить в соединительную таблицу SectionContent.Итак, сначала я должен проверить, есть ли такая же запись уже в соединительной таблице.Также в проекте много операций вставки.Мне нужно искать все операции вставки и мне нужно добавить дополнительный запрос для вставки в таблицу соединений.
Также мне нужно получить разделы и содержимое на странице.Это дополнительные усилия для меня.
Я могу удалить связь между таблицами Section и Content.И я могу использовать дополнительные запросы на соединение в столбце PageNo.Но я хочу использовать сущность.Я хочу получить содержимое в виде объекта, например Section.Contents, и хочу получить разделы так же, как Content.Sections.
Так можно ли добавить связь «многие ко многим» между разделом и содержимым в столбце PageNo без ключей FK SQL Server?
Редактировать: Кроме того, если я использую приведенную выше таблицу соединений, я должен выполнить sqlзапрос, как это, я?
INSERT INTO SectionContent
SELECT * FROM
(
SELECT Section.id AS SectionId, Content.id AS ContentId
FROM Section
LEFT OUTER JOIN Content
ON Section.PageNo = Content.PageNo AND
Section.BookId = Content.BookId
UNION
SELECT Section.id AS SectionId, Content.id AS ContentId
FROM Section
RIGHT OUTER JOIN Content
ON Section.PageNo = Content.PageNo AND
Section.BookId = Content.BookId
) AS T
WHERE SectionId is not NULL AND ContentID is not NULL
GROUP BY T.SectionId, T.ContentId