Скажем, у нас есть такой сценарий:DB Design: Любите абстракцию или внешние ограничения?
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.
Что вы думаете о выше конструкции: я что-то в этом роде говорить? Имеет ли смысл включать «концепции ООП» в этот сценарий БД?
И, наконец, предпочитаете ли вы иметь ограничения по внешнему ключу первого сценария или более общие (с риском связать художника с дорожкой, например, поскольку нет проверки, чтобы увидеть внешний ключ ввода ценность - это действительно альбом)?
..btw, подумайте об этом, я думаю, вы можете проверить, соответствует ли введенное значение RelField исполнителя для альбома, с триггерами?
У вас нет ни одного из ваших альбомов? У вас нет нескольких исполнителей? Вы также не записываете такие вещи, как группа (оркестр), играющая музыку, солисты, дирижеры, композиторы, аранжировщики и т. Д. Ах, ну, это только вопрос, но будьте осторожны с чрезмерным упрощением. –