@kaka888
C, C++, Qt, Python Flask, MySQL, Lua

Каким способом связать две таблицы? Через составной первичный ключ или через доп. поле id?

Перивет. Придумал два варианта связывания двух таблиц (таблица члэнов коллективного аккаунта и таблица привилегий для отдельно взятого члэна аккаунта (пользователь может являться члэном нескольких коллективных аккаунтов)):
  • Добавить в обе таблицы новое поле id и использовать его в качестве первичного ключа в первой и внешнего ключа во второй таблице
  • Использовать уже имеющийся составной первичный ключ [user_id + account_id], но тогда во второй таблице тоже придётся добавлять эти два поля вместо одного поля для id


Таблицы (InnoDB):
CREATE TABLE account_member
(
    user_id INT REFERENCES user(id),
    account_id INT REFERENCES account(id),
    is_owner BOOLEAN NOT NULL,
    entry_date DATETIME NOT NULL DEFAULT NOW(),
    PRIMARY KEY (user_id, account_id)
);

CREATE TABLE privileges
(
    user_id INT REFERENCES user(id),
    account_id INT REFERENCES account(id),
    privilege_id INT NOT NULL
);


Что же выбрать? : \
  • Вопрос задан
  • 387 просмотров
Решения вопроса 1
Denkuwus
@Denkuwus
15 y.o
Как правило, рекомендуется использовать одно поле в качестве первичного ключа в таблице, потому что с ним проще и легче работать. В вашем случае вы можете использовать составной первичный ключ [user_id + account_id] в качестве первичного ключа в первой таблице (таблица членов коллективной учетной записи). Затем вы можете использовать тот же составной первичный ключ в качестве внешнего ключа во второй таблице (таблица привилегий для одного члэна учетной записи).

Таким образом, вы можете убедиться, что каждая запись во второй таблице связана с конкретным пользователем и учетной записью, и вы можете использовать первичный ключ для уникальной идентификации каждого члэна в первой таблице. Вам не нужно будет добавлять дополнительное поле id ни в одну из таблиц.

Также рекомендуется убедиться, что поле внешнего ключа во второй таблице проиндексировано, чтобы вы могли эффективно запрашивать и объединять две таблицы.

Если вы решите использовать дополнительное поле идентификатора в качестве первичного ключа в первой таблице, вы все равно можете использовать составной первичный ключ [user_id + account_id] в качестве уникального ограничения, чтобы гарантировать, что каждый участник однозначно идентифицируется в конкретной учетной записи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы