|
MySQL.RU - Webboard
Вернуться
Первичный ключ (Игорь) 12/04/2011 - 23:22:58
Re: Дополнение (Игорь) 13/04/2011 - 00:44:07
Re: Дополнение (Akina) 13/04/2011 - 08:53:28
Re: Дополнение (Игорь) 13/04/2011 - 09:50:22
Re: Дополнение (Игорь) 13/04/2011 - 11:13:43
Re: Дополнение (Akina) 13/04/2011 - 18:35:45
Re: Дополнение (Игорь) 14/04/2011 - 09:24:50
> Original message text:
> From: Игорь - 12/04/2011 - 23:22:58
> Subject:Первичный ключ
> -----------------
> Здравствуйте.
> Сейчас разбираюсь с ключами таблиц. Насколько понимаю, каждой таблице хорошо бы иметь первичный ключ, и зачастую это суррогатный id.
> У меня есть таблица, скажем, с количеством посещения некоего раздела пользователями за день. То есть, записей там предполагается много.
> Нужно ли и для этой таблицы поле id с первичным ключом?
>
From: Akina - 13/04/2011 - 18:35:45
Subject:Дополнение
-----------------
> таблицу без индекса создал, ругается разве что phpMyAdmin.
Вывод - таблицу без индекса создать можно.
Второй вывод - это явно плохая практика.
> Насколько я понял
Первичный ключ бывает:
1) суррогатный
Самый частый вариант. Обычно автоинкрементное поле INT либо BIGINT.
И самый обычно правильный вариант. Чтобы иначе - нужны веские основания.
2) нативный
Одно поле является ключом. Используется, если поле имеет определённый смысл (является атрибутом сущности, скажем номер паспорта или там табельный номер). Хуже варианта 1 тем, что затрудняется изменение его содержания, возникают проблемы согласованной конвертации в многотабличном окружении, есть потенция развала связей.
3) составной
Ключом является комбинация полей или их частей. Самый редкий вариант, требуется серьёзное основание для такого ключа.
Обычные индексы, не-ключи, используются либо для организации связи таблиц посредством внешних ключей (при этом задействуется система контроля целостности и непротиворечивости информации, которая не даст рассыпаться логической связи данных от неумелого воздействия), либо для создания структур, ускоряющих работу (фильтрацию и сортировку) за счёт того, что обрабатывается не пухлая таблица, а достаточно компактный индекс. Иногда для получения результата вообще не нужно обращение к таблице, например:
select date
from tab
where date > now() - interval 1 year
order by date;
При отсутствии индекса по date сервер должен будет прочитать всю таблицу, собрать все даты, отфильтровать неподходящие и отсортировать остаток.
Если есть индекс - можно прочитать индекс, сразу найти ту часть, которая удовлетворяет условию, и выводить в том порядке, в каком даты записаны в индексе... т.е. сама таблица и не нужна!
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
38278
|
|