изменить мой ПК в таблице - PullRequest
3 голосов
/ 08 мая 2011

Если у меня есть таблица с именем university, с двумя полями, одно для id_university, то есть PK, а другое для name_of_university. Каждое название университета уникально и не может повторяться.

В этом случае я могу удалить id_university и поставить name_of_university в качестве первичного ключа, правильно?

Примерно так:

Таблица

university
-----------------------
pk name_of_university

спасибо

Ответы [ 4 ]

4 голосов
/ 08 мая 2011

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

Таким образом, рекомендуется использовать суррогатный (синтетический) первичный ключ для использования во внешних ключах и т. Д. И поддерживать уникальное ограничение для бизнес-ключа.Итак, хорошая новость в том, что ваша текущая модель данных близка к наилучшей практике.Просто добавьте уникальное имя в столбце имени, и все готово.

 alter table university
      add constraint uni_name_uk unique (name_of_university);
2 голосов
/ 08 мая 2011

Хорошей практикой является оставить первичный ключ как id_university и просто добавить уникальный индекс на name_of_university.

0 голосов
/ 09 мая 2011

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

0 голосов
/ 08 мая 2011

Да, правильно.

Но не рекомендуется.
Длинный ПК замедляет все, сильно вниз.

А на InnoDB PK включен в каждый вторичный ключ, это приведет к всплытию таблицы.
Объединение будет медленнее, вставки будут медленнее, сортировки будут медленнее.
И ваши столы будут больше. Это действительно плохая идея: -Извините

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

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