Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
38278



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |