Скажем, у нас есть такой сценарий:
Artist ==< Album ==< Track
//ie, One Artist can have many albums, and one album can have many tracks
В этом случае все 3 сущности имеют в основном одинаковые поля:
- ID
- Имя
- Иностранец отношения «один-много» с соответствующими детьми (Исполнитель в Альбом и Альбом в Трек
Типичным решением для предоставленного решения являются три таблицы с одинаковыми полями (ArtistID, AlbumID и т. Д.) И ограничениями внешнего ключа в поле отношения один-много.
Но можем ли мы в этом случае включить форму наследования, чтобы избежать повторения одного и того же поля? Я говорю что-то в этом роде:
Table: EntityType(EntityTypeID, EntityName)
This table would hold 3 entities (1. Artist, 2. Album, 3. Track)
Table: Entities(EntityID, Name, RelField, EntityTypeID)
This table will hold the name of the entity (like the name of
an artist for example), the one-many field (foreign-key
of EntityID) and EntityTypeID holding 1 for Artist, 2 for Album
and so on.
Что вы думаете о вышеуказанном дизайне? Имеет ли смысл включать «концепции ООП» в этот сценарий БД?
И, наконец, вы бы предпочли иметь ограничения внешнего ключа первого сценария или более общий (с риском связать исполнителя с дорожкой, например, так как нет никакой проверки, чтобы увидеть значение внешнего ключа ввода действительно из альбома) подход?
.. кстати, если подумать, думаю, вы действительно можете проверить, соответствует ли введенное значение RelField of Artist альбому, возможно, с триггерами?