Может быть, немного другой подход - супертип / подтип обычно используется, когда у вас есть очень специфические столбцы для каждого подтипа, как в супертипе Person с подтипами Patient и Doctor. Person хранит все данные, общие для людей, а Patient и Doctor содержат очень конкретные столбцы для каждого из них. В этом примере ваши book_notes
и article_notes
не сильно отличаются друг от друга.
Я бы предпочел иметь публикацию супертипа с подтипами Book и Article. Тогда вы можете иметь только одну таблицу заметок с FK для публикации. Учитывая, что номер PK в публикации равен номеру [PK, FK] книги (статьи), вы можете делать соединения с примечаниями по публикации, книге или статье.
Таким образом, вы можете просто добавить другую публикацию, например, журнал, добавив новую таблицу подклассов и ничего не изменяя в отношении примечания.
Например:
TABLE Publication (ID (PK), Title, ...more columns common to any publication)
TABLE Book (ID (PK) = FK to Publication, ISBN, ... more columns specific to books only)
TABLE Article (ID (PK) = FK to Publication, ... more columns specific to articles only)
TABLE Note (ID, PublicationID FK to Publication, NoteText)
Первичный ключ для таблицы Book и Article также служит внешним ключом для публикации.
Теперь, если мы добавим еще одну публикацию, журнал:
TABLE Magazine (ID (PK) = FK to Publication, ... more columns specific to magazines only)
Нам не нужно изменять Note каким-либо образом - мы добавили столбцы, относящиеся только к журналам.