Ваш третий вариант - использование справочной таблицы - является, вероятно, наиболее широко поддерживаемым, и это то, что я регулярно использую.
С третьим вариантом, если столбец mediaTypeId
имеет внешний ключ к таблице MediaType
, вы гарантируете целостность данных (если только вы не используете разновидность SQL, которая не применяет внешние ключи, такую как SQLite или MySQL с механизмом MyISAM).
Вы не получите этого с вашим первым решением - потенциально вы можете иметь запись в этой таблице, в которой для is_audio
и is_image
установлено значение 1
. Кроме того, когда вы добавляете больше типов медиа, ваша таблица становится шире, уродливее и громче.
Ваш второй вариант (с использованием перечислений), кажется, специфичен для MySQL (что нормально, если вы никогда не планируете использовать что-либо кроме MySQL). Со страницы документации на самом деле это строковый тип (который излишне, но немного занимает больше места, чем целое число), и добавление новых опций кажется очень болезненным (см. этот вопрос), Кроме того, если вы хотите, чтобы другие таблицы ссылались на типы носителей, все они должны иметь свои собственные перечисления.
Я бы выбрал третий вариант, который более переносим, и позволяет другим таблицам ссылаться также на MediaType
.