MySQL Lookup таблица и id / ключи - PullRequest
1 голос
/ 11 марта 2010

Надеясь, что кто-то может пролить свет на это: нужны ли для таблиц поиска свой собственный идентификатор?

Например, скажем, у меня есть:

Table users: user_id, username

Table categories: category_id, category_name

Table users_categories: user_id, category_id

Нужно ли каждой строке в "users_categories" дополнительное поле идентификатора? Каким будет первичный ключ указанной таблицы? Спасибо.

Ответы [ 4 ]

4 голосов
/ 11 марта 2010

У вас есть выбор. Первичный ключ может быть либо:

  1. Новый, в противном случае бессмысленный столбец INTEGER.

  2. Ключ, состоящий как из user_id, так и category_id.

Я предпочитаю первое решение, но я думаю, что большинство программистов здесь предпочитают второе.

2 голосов
/ 11 марта 2010

Вы можете создать составной ключ, который использует оба ключа

Обычно, если в таблице нет подходящего ключа, который вы хотите создать, либо составной ключ, состоящий из 2 или более полей,

например:

Код ниже найден здесь

  CREATE TABLE topic_replies (
topic_id int unsigned not null,
id int unsigned not null auto_increment,
user_id int unsigned not null,
message text not null,
PRIMARY KEY(topic_id, id)); 

для этого вы можете добавить код, который выполняет следующее:

ALTER TABLE users_categories ADD PRIMARY KEY (user_id, category_id);

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

ALTER TABLE users_categories ADD CONSTRAINT fk_1 FOREIGN KEY (category_id) Ссылки на категории (category_id);

но если вы хотите создать новый первичный ключ в таблице users_categories, это вариант. Просто знайте, что это не всегда необходимо.

1 голос
/ 11 марта 2010

Если ваша таблица users_categories имеет уникальный первичный ключ сверх (user_id, category_id), то - нет, не обязательно.

Только если вы

  • хочу легко ссылаться на отдельные строки этой таблицы из другого места
  • имеют более одной равной user_id, category_id комбинации

Вы можете воспользоваться отдельным полем для ID.

0 голосов
/ 11 марта 2010

Каждая таблица нуждается в первичном ключе и уникальном идентификаторе в SQL, несмотря ни на что. Просто сделайте это users_categories_id, технически вам никогда не придется его использовать, но он должен быть там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...