Я пытаюсь выяснить, какие лучшие практики для ситуации я столкнулся несколько раз за последний год.Использование SQL, какова наилучшая практика для проектирования таблиц, которые ведут себя как интерфейсы для других таблиц?
Для иллюстрации я разработал поддельную базу данных, состоящую из пользователей, фильмов и фильмов, просмотренных пользователями.
В этом примере, мы хотим, чтобы иметь возможность захватить мета-данные о любой момент пользователь смотрит фильм, как и их расположение или устройства они использовали, но типы мета-данных, мы можем хотят собирать в будущем, может расти. Цель состоит в том, чтобы создать базу данных, которая может агрегировать многие типы метаданных для одного просмотра фильмов.
Итак, я сделал таблицу под названием MovieWatchedMetaData, чтобы действовать как мост между разными таблицами, содержащими метаданные. Предпосылка заключается в том, что эта таблица свяжет первичный ключ из таблицы метаданных, такой как LocationWatched, к определенному случаю просмотра фильма.
Я не уверен в этом подходе, и если это будет вредно в долгосрочной перспективе. Это плохая практика? Есть ли лучший, более подходящий способ сделать это? Как бы вы организовали эти таблицы?
Тот факт, что 'foreign_key_id' не может быть принудительно применен, не говоря уже о том, какую таблицу он должен ссылаться, должен быть индикатором, это не очень хорошая идея. – Uueerdo
Верно, это определенно красный флаг. Я предполагаю, что альтернативой, к которой я пришел, является включение location_id и device_type_id в таблицу MoviesWatched. – Robert
[_Быстрая практика для многих: много_] (http://stackoverflow.com/documentation/mysql/4857/many-to-many-mapping-table). –