Форум: "Базы";
Поиск по всему сайту: 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.015 c
3-66801           Malder                2002-02-24 18:03  2002.03.21  
Помогите создать базу данных...


1-66892           Oak                   2002-03-05 20:31  2002.03.21  
Проблема с JPEG


3-66725           volodya_              2002-02-20 16:48  2002.03.21  
Вопрос по SQL запросам


1-66850           DR                    2002-03-05 14:36  2002.03.21  
Как прервать загрузку TWebBrowser а на 30 процентах


14-67009          С_тоша                2002-02-08 16:37  2002.03.21  
HELP!!!!!!!!