Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Вниз

Необходим ли первичный ключ? 


tovSuhov   (2002-02-21 10:58) [0]

Обязательно ли при создании таблицы назначать некое поле первичным ключем, если я и так, "в голове",знаю, что оно первичное и через него связываю данные из других таблиц...
Или же создание первичного ключа ускоряет работу с таблицей?



Johnmen   (2002-02-21 11:09) [1]

Ускоряет значительно !



EAlexander   (2002-02-21 11:09) [2]

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



EsKor   (2002-02-21 11:27) [3]

Вы то м.б. и знаете, но вот ваше СУБД об этом не догадывается.
Но если ваше поле точно является уникальным и вы не хотите его дать ему статус первичного ключа, и связываете таблицы в рукопашную и таким же образом поддерживаете целостность и непротеворечивость БД и это хорошо получается, то и не надо. Правда если с вашей БД будут работать несколько приложений, то в каждом из них, кроме собственно разрешения конфликтов доступа, нужно очень тщательно продумывать и обеспечивать все то о чем написано выше. А вот при использовании индексов и первичных ключей о большинстве проблем можно специально не заботится скурпулезно прописывая код. Ну если даже у вас не СУБД, а файловая БД, то часть этих забот могут взять на себя компоненты доступа и управления БД. В общем, лучше от своего приложения или СУБД ключевое поле в секрете не держать. Извините за м.б. некоторую сумбурность изложения.



deleon   (2002-02-21 12:16) [4]

Все правильно, первичный ключ ГАРАНТИРУЕТ уникальность записи, что позволяет правильно делать UPDATE & DELETE, так что если вы не уверены что все записи таблицы будут уникальными, лучше первичный ключ создать!



Vadim   (2002-02-21 17:52) [5]

tovSuhov © (21.02.02 10:58)
1. Создание первичного ключа обязательно (любителям граблей не читать). В качестве первичного ключа могут быть использованы любые поля (от 1 до нескольких), удовлетворяющие условиям:
- объявлены как NOT NULL;
- не могут (в сумме) иметь дублирующихся значений;
- имеют небольшую суммарную "ширину".
Если полей, удовлетворяющих данному условию нет, надо создать искусственный первичный ключ.

2. Есть редкие обоснованные исключения.

3. Некоторые любители (вроде меня) в любом случае создают искусственный ключ для унификации: первое поле в таблице - ID, поля в других таблицах, ссылающиеся на него - ID_<имя таблицы>. Очень удобно.



petr_v_a   (2002-02-22 13:32) [6]

Ускоряет select по ключевому полю, замедляет insert. Если update/delete имеют вид ... where id= :id, они работают быстрее засчет индекса, в противном случае медленнее. Если уверен, что ключ никак не сможет продублироваться, ссылочная целостность не нарушится, можно PK не использовать. Но такие задачи больно редко встречаются :))




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.025 c
3-66758           Sheva                 2002-02-21 12:17  2002.03.21  
Dos-Win кодировки.


3-66733           Revo                  2002-02-15 14:01  2002.03.21  
Как конвертировать базу данных из dBase в InterBase?


3-66793           kvcomp                2002-02-23 15:04  2002.03.21  
Ошибка в Paradox типа


14-66983          VuDZ                  2002-02-07 13:41  2002.03.21  
Системы Управления Параллельными Версиями


1-66863           fishka                2002-03-04 10:51  2002.03.21  
Компонент ChartFX и цвета графиков