Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Primary Key и Unique key


Страницы:   1 2 3 4

Piter ©   (2005-10-04 22:19:00) 

Объясните, пожалуйста, человеческим языком - зачем нужен Primary Key?

Большинство отвечает - чтобы создать уникальное поле. Ок, а чем это тогда отличается от Unique key?
Большинство отвечает, что в Primary Key можно указывать несколько полей.

Это весь функционал этих директив?

А что физически в базе происходит при этом? Так ли важно задавать первичный ключ? Если первичный ключ - одно поле, то можно легко заменить на Unique key?

А если у меня все поля могут быть одинаковые - то Primaty Key не нужен?

А если уникальность нужна только для всех полей - допустим указывать в Primary Key все поля базы? Имеет ли это смысл?

Запутался чего-то я...


sniknik   (2005-10-04 23:47:00) [61]

> у них разная семантика, хотя внешне и похоже.
как говорил еще капитан Врунгель © - "Каждая селедка рыба, но не каждая рыба селедка!". о как. ;) -> "каждый Primary Key Unique, но не каждый Unique key Primary" ;о))


Anatoly Podgoretsky   (2005-10-04 23:24:00) [62]

Piter ©   (04.10.05 23:03) [6]
Уникальное поле не обязано быть, в отличии от первичного ключа. Еще раз у них разная семантика, хотя внешне и похоже. Как реализован ключ через индексы или по другому роли не играет - это внутреннее дело базы.


Anatoly Podgoretsky   (2005-10-04 23:22:00) [63]

Я даже догадывают почему вопрос, в свое время огреб проблем с МФ из-за отсуствия ключа


Sergey_Masloff   (2005-10-04 23:09:00) [64]

Piter ©   (04.10.05 23:03) [6]
>И поэтому нужно задать Primary Key... если же это поле не будет задано - >то база сама создаст дополнительное поле и обеспечит его уникальность...
Нет это дополнительное поле представляющее адрес записи будет создано в любом случае - задавай ты праймари кей или не задавай. Но тебе от этого не жарко не холодно - нет первичного ключа огребаешь проблемы с путаной логикой и тормозами есть праймари кей - наслаждаешься всеми доп. возмжностями типа ссылочной целостности и др.


Sergey_Masloff   (2005-10-04 23:05:00) [65]

Piter ©   (04.10.05 22:58) [4]
>Разве поле первичного ключа нельзя менять?
Нельзя. На то он и первичный. Нет, технически это возможно. Также как два разных COM интерфейса можно с одним IID создать. Только на хрена? Так что для простоты лучше считать что нельзя.
 А насчет того что изменяется - уникальные ключи имеющиеся в реальном мире имеют тенденцию к изменениям. Номера паспортов, документов, ИННы -все меняется и кто заложился на их константность раз за разом огребают проблем. Впрочем по этому поводу лучше почитать мнение Тенцера (есть в подборке статей на http://www.podgoretsky.com). Вообще по этому вопросу ИМХО все ясно было еще в конце 70-х  но микрохоливоры не прекращаются.


Piter   (2005-10-04 23:03:00) [66]

В принципе, я кажется потихоньку догоняю. Я так понимаю (правда не знаю почему) - но физически в структуре базе данных должно быть уникальное поле - чисто из принципов построения СУБД наверное следует.

И поэтому нужно задать Primary Key... если же это поле не будет задано - то база сама создаст дополнительное поле и обеспечит его уникальность...


Anatoly Podgoretsky   (2005-10-04 22:59:00) [67]

Разница в основном в понятии, но иногда и физически - для Парадокс и MSSQL
Уникальный индекс делают для недопустимости одинаковых значений, а не для идентификации. Первичный ключ всегда уникальный и не может содержать NULL значений. И система и средства разработки знают про него.
У первичного ключа особый статус, поэтому он очень важен. Ты можешь не делать никаких индексов, но первичный ключ обязан быть, без него может быть много проблем.

Уникальный индекс не обязан состоять из одного поля, может из нескольких.


Piter   (2005-10-04 22:58:00) [68]

Sergey_Masloff   (04.10.05 22:51) [3]
А так как все имеет тенденцию к изменению то в качестве первичного обычно создается дополнительный (суррогатный) не имеющий какого-то реального воплощения в предметной области.


типа auto increment?

А что значит тенденцию к изменению? Разве поле первичного ключа нельзя менять? Главное, чтобы не было такого же поля...


Sergey_Masloff   (2005-10-04 22:51:00) [69]

Да просто выбран он как праймари. Любой уникальный является кандидатом на роль первичного. Исходя из логики приложения какой-то выбирают на роль первого среди равных (уникальных) то есть первичного. А так как все имеет тенденцию к изменению то в качестве первичного обычно создается дополнительный (суррогатный) не имеющий какого-то реального воплощения в предметной области.


Piter   (2005-10-04 22:45:00) [70]

Anatoly Podgoretsky ©   (04.10.05 22:41) [1]
Primary Key нужен для одназначной идентификации записей


Ну я об этом писал:

Piter ©   (04.10.05 22:19)
Большинство отвечает - чтобы создать уникальное поле. Ок, а чем это тогда отличается от Unique key?


Anatoly Podgoretsky   (2005-10-04 22:41:00) [71]

Primary Key нужен для одназначной идентификации записей, имеет специальный статус для базы.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо