Мой вопрос касается структурирования базы данных для таблицы, которая связывает 2 другие таблицы для хранения отношений. Например,
, у меня есть 3 таблицы, users
, locations
и users_locations
. * Таблицы 1006 *
users
и locations
имеют столбец id
.
users_locations
таблица содержит user_id
и location_id
из двух других таблиц.
как вы определяете свои индексы / ограничения для этих таблиц, чтобы эффективно отвечать на вопросы, такие как, какие местоположения у этого пользователя или какие пользователи принадлежат этому местоположению?
например.
select user_id from users_locations where location_id = 5;
или
select location_id from users_locations where user_id = 5;
В настоящее время у меня нет набора ограничений внешнего ключа, который, как я предполагаю, я должен добавить, но это автоматически ускоряет запросы или создает индекс?
Я не думаю, что смогу создать индекс для каждого столбца, так как будут дубликаты, например. несколько записей user_id для каждого местоположения и наоборот.
Будет ли добавление составного ключа, например PRIMARY_KEY (user_id, location_id)
, ускорять запросы, когда большинство запросов содержат только половину ключа?
Есть ли основания для просто установите поле AUTO INCREMENT PRIMARY_KEY
в этой таблице, когда вы никогда не будете запрашивать по этому идентификатору?
Действительно ли мне нужно задать PRIMARY KEY
?