Недавно я столкнулся с довольно сложной проблемой, и, много раз осмотревшись, не смог найти решения.Я уже много раз находил ответы на свои вопросы на stackoverflow.com, поэтому я решил опубликовать здесь.
Итак, я создаю систему управления пользователями / группами для веб-проекта, и я 'хранит все связанные данные в базе данных postgreSQL.Эта система использует три таблицы:
- USERS (содержит первичный ключ "USER_ID")
- GROUPS (содержит первичный ключ "GROUP_ID")
- GROUP_USERS
Две первые таблицы просто определяют всех пользователей и все группы на сайте, а последняя таблица, GROUP_USERS, хранит группы, частью которых является каждый пользователь.В нем только два столбца:
- USER_ID
- GROUP_ID
Поскольку каждый пользователь может быть членом нескольких групп, я решил создать отдельную таблицудля этого вместо того, чтобы хранить столбец, разделенный запятыми, в таблице USERS.
Теперь оба столбца являются внешними ключами, и я хочу также сделать их составным первичным ключом, так как каждая комбинация USER_IDи GROUP_ID должен быть уникальным.Но теперь я застрял с тем, что кажется большим количеством индексов и отношений с очень маленькой таблицей, содержащей только цифры.В конце я хочу, чтобы эта таблица была максимально быстрой, даже если она содержит десятки тысяч строк.Размер на диске не должен быть проблемой, так как в любом случае это просто все числа, но довольно глупо иметь полноразмерный индекс, ссылающийся на меньшую таблицу.
Если я придерживаюсь своего текущего решения, сохраняйте запятую-разделенные значения в столбце в таблице USERS или есть какое-либо другое решение, о котором я должен знать.То, что я ищу, - это лучшая производительность.Эта таблица может потенциально (но маловероятно или часто) запрашиваться несколько сотен раз при загрузке одной страницы.
Я не хочу использовать столбец массива, даже если они поддерживаются postgreSQL.Я хочу быть настолько универсальным, насколько это возможно, чтобы при необходимости позже переключать базу данных.
РЕДАКТИРОВАТЬ: Другими словами, будет ли использование составного первичного ключа и двух внешних ключей в одной таблице с двумя столбцами иметьнегативное влияние на производительность, а не наоборот из-за размера сгенерированного индекса?
EDIT2: разъяснения.
Спасибо!