Мне было интересно, есть ли чистый способ представления отношений is-as, как показано в этом примере:
Эта БД хранит время записи для трех типов программ: фильмы, игровые шоу, драма. В объектно-ориентированном смысле каждый из них - это программа. Каждый из этих подклассов имеет разные свойства. Вот таблицы (префикс fk указывает на внешний ключ):
фильм
ID
Имя
fkDirector
Gameshow
ID
Имя
fkHost
fkContestant
драма
ID
Имя
В терминах ОО таблица записей будет выглядеть следующим образом:
запись
ID
fkProgram
* 1036 начальное время *
Конечное время
Единственный способ сделать это без нарушения нормальных форм - это иметь три таблицы записей, а именно recordMovie , recordGameShow и recordDrama .
Есть ли способ объединить эти таблицы в одну, не нарушая принципов нормализации базы данных?
Вот несколько нерабочих примеров, иллюстрирующих идею:
Программа
ID
fkMovie
fkGameShow
fkDrama
Эта таблица нарушает первую нормальную форму, потому что она будет содержать нули. Для каждой строки только одна из 3 записей будет отлична от нуля.
Программа
ID
fkSpecific ← fkMovie ИЛИ fkGameShow ИЛИ fkDrama
fkType ← будет указывать, в какую таблицу смотреть
Здесь я не смогу обеспечить ссылочную целостность, потому что fkSpecific потенциально может указывать на одну из трех таблиц.
Я просто пытаюсь сэкономить, имея здесь 3 таблицы вместо одной. Может быть, это просто не относится к RDB.