Форум: "Базы";
Поиск по всему сайту: 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.022 c
14-66997          McSimm                2002-02-08 11:59  2002.03.21  
Перестановки букв.


3-66745           AndrewK               2002-02-20 13:25  2002.03.21  
Как обратиться к агрегированному полю в запросе


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


4-67043           bobr                  2002-01-21 17:08  2002.03.21  
Знаю PID процесса как получить имя пользователя запустившего процесс


3-66736           dmitriyk              2002-02-18 02:49  2002.03.21  
Никто не встречал компонент TDBGrid у которог можно былобы вставить фоновую картинку ?