Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

Primary Key и Unique key   Найти похожие ветки 

 
Desdechado ©   (2005-10-05 22:17) [40]

Anatoly Podgoretsky ©   (05.10.05 18:56) [37]
> Зачем?
Мне так нравится больше :)


 
ANB ©   (2005-10-06 09:24) [41]


> У меня вполне конкретный вопрос - если PK нужен чисто для
> целостности ссылок - то при наличии всего одной таблицы
> - он не нужен?

А у меня чисто конкретный ответ - если работаешь на оракле, то не очень (там еще есть rowid, но использование его не по теме не приветствуется), если на любой другой базу - то очень желателен, причем суррогатный на генераторе. Так как через него легче всего находить конкретную запись. SQL сервера - это не DBF и тут нельзя просто прогуляться по таблице и удалить конкретную запись. Плюс никто не может гарантировать, что в дальнейшем к этой таблице не будет связок. Я на такие грабли уже наступал - завел талицу, по логике ей было достаточно иметь составной ключ. Через неделю выяснилось, что на эту таблицу нужно сделать ссылку. А составная ссылка - жуткие грабли.


 
msguns ©   (2005-10-06 09:29) [42]

>Piter ©   (05.10.05 18:15) [34]
>а если в логике приложения таблица только одна. PK не нужен?

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

Просто пример для наглядности.
Мне как-то пришлось ремонтировать свое кресло, для чего я его разобрал. И ужаснулся, ибо все его деревянные части были сделаны из нестуганной сосны, даже грубым рубанком не прошлись, шаромыжники. Просто гвоздями грубо сбит каркас из неструганных досок и брусов, а сверху обтянуто материей.
Этим летом ездил к маме в Волгоград и она меня попросила посмотреть покосившееся кресло из румынского гарнитура, купленного в начале 70-х.
Разобрал, глянул.. Все деревянные части сделаны из отполированных брусков хороших сортов дерева, без сучков и трещин. Крепеж исключительно на уголках и вкладышах болтами и винтиками, которые даже спустя 30 лет легко отвинтились. Поневоле отдал дань уважения Мастерам, сделавшим его.


 
Fay ©   (2005-10-06 12:23) [43]

2 Piter ©   (04.10.05 22:45) [2]
>> Ок, а чем это тогда отличается от Unique key?
Лучше+короче [1], наверноё, не скажешь.

2 Piter ©   (04.10.05 23:03) [6]
>> чисто из принципов построения СУБД наверное следует.
Вы уже большой мальчик. Пора бы знать точно.

>> если же это поле не будет задано - то база сама создаст дополнительное
>> поле и обеспечит его уникальность
Это вопрос, или бред?


 
Fay ©   (2005-10-06 12:25) [44]

2 Sergey_Masloff   (04.10.05 23:09) [8]
> Нет это дополнительное поле представляющее адрес
> записи будет создано в любом случае - задавай ты
> праймари кей или не задавай.


Покажете как-нибудь?


 
Fay ©   (2005-10-06 12:33) [45]

2 Piter ©   (05.10.05 18:58) [38]
Вы вАщЕ понимаете смысл слова constraint?

Как верно заметил msguns ([42]), у некоторых людей отлично получается делать мебель. И многие из них её действительно делают, не спрашивая "А почему нельзя гвоздями? Чем они хуже тех же шурупов и т.д.?". Таким замечательным мастерам я простил бы вопрос типа "зачем нужен Primary Key?"...


 
Курдль ©   (2005-10-06 12:59) [46]

Ой, как интересно все! Скока слов написано!!!

Только мне кажется, что обучать автора топика стали не с той стороны (мягко говоря).

Если опустиить все злобные советы читать книжки, а не лезть за разъяснениями на форум, то все равно стоит внести кое-какие дополнения.

БД проектируются не от ключей, индексов, полей и правил.
Они проектируются от автоматизируемых бизнес-процессов и концепции хранения данных. Т.е. первым делом разрабатывается КОНЦЕПТУАЛЬНАЯ МОДЕЛЬ.
И нет в ней никаких ключей, индексов и даже таблиц.
Есть "сущности" или "элементы" (entity) и связи (relations). Поэтому она и называется еще "ER-модель".
Словестное описание таких моделей не содержит и упоминания о ключах и т.п.
Например: "В БД предусмотрена сущность ТОВАР (имя, срок годности), связанная, как "один-ко-многим" с сущностью СДЕЛКА(дата, цена). Последняя, в свою очередь, связана как "много-к-одному" с сущностью КОНТРАГЕНТ(имя, ИНН). И т.д.
Вот эти волшебные слова "связана", "много-к-одному" ... - и скрывают в себе необходимость иметь идентификаторы и внешние ключи.
А дальше уже можно ничего не знать о внутренней структуре БД и все равно успешно ее создать средствами CASE. А вот чтобы писать прикладные программы под такую БД ее структуру знать придется.


 
Desdechado ©   (2005-10-06 13:27) [47]

Курдль ©   (06.10.05 12:59) [46]
вот только "волшебные слова" никак не объясняют разницу между PK и UQ, а тем более этогоне сделают CASE-средства
концептуальную модель создает аналитик, а вот структуру БД создает проектировщик
так вот мы рассматриваем не поведение аналитика, а поведение проектирощика


 
Sergey_Masloff   (2005-10-06 13:37) [48]

Fay ©   (06.10.05 12:25) [44]
>Покажете как-нибудь?
select rowid from ANYTABLE  -- ORACLE
select rdb$db_key from ANYTABLE  -- InterBase


 
msguns ©   (2005-10-06 13:44) [49]

>Sergey_Masloff   (06.10.05 13:37) [48]
>select rowid from ANYTABLE  -- ORACLE
>select rdb$db_key from ANYTABLE  -- InterBase

И как это соотноситься с [8], а именно

Нет это дополнительное поле представляющее адрес записи будет создано в любом случае - задавай ты праймари кей или не задавай.

???

Сереж, видимо, ты просто коряво выразил свою мысль,- вот у Фэя возникли непонятки. Как, впрочем и у меня, только я промолчал, прибитый авторитетом ;)))


 
Sergey_Masloff   (2005-10-06 14:13) [50]

msguns ©   (06.10.05 13:44) [49]
Да, похоже я высказался туманно ;-) Нет это дополнительное
Может это сбило ;-) Я просто хотел сказать что поле с системными адресами записей есть в любом случае. Но они НЕ праймари кей и никоем образом не оправдывает его отсутствие. И никаких его функций не выполняет.
 Надеюсь никто не понял меня так что раз dbkey есть то праймари не нужен? Такого я не мог не то что сказать - даже в бреду подумать ;-)))


 
Fay ©   (2005-10-06 15:10) [51]

2 Sergey_Masloff   (06.10.05 13:37) [48]
>select rowid from ANYTABLE  -- ORACLE
> select rdb$db_key from ANYTABLE  -- InterBase

Некий смысл имеет только rowid в Oracle.
Говорить rdb$db_key (и т.п.) так же занимательно, как утверждать, что PK - это индекс.


 
msguns ©   (2005-10-06 15:15) [52]

>Sergey_Masloff   (06.10.05 14:13) [50]

Если бы вместо "поле" прозвучало "указатель на физический адрес записи", вопросов бы не было ;))
Однако этот адрес - дело чисто сервера,- никакой клиент не может и не должен его знать. Тем более, что это - величина далеко не постоянная ;)


 
Андрей Жук ©   (2005-10-06 15:22) [53]

кстати, насколько я знаю, идентификационный номер, который в Украине выдается налоговой инспекцией, не генерируется отфонарно, я является как бы составным - дата рождения + номер по порядку того, кто обратился.


 
Fay ©   (2005-10-06 15:24) [54]

2 msguns ©   (06.10.05 15:15) [52]
Полностью согласен. Но с "полем" интереснее 8)


 
Fay ©   (2005-10-06 15:27) [55]

2 Андрей Жук ©   (06.10.05 15:22) [53]
Если "номер по порядку того, кто обратился" считать "отфонарным", то их "+" тоже "отфонарный".


 
Андрей Жук ©   (2005-10-06 15:31) [56]


> Если "номер по порядку того, кто обратился" считать
> "отфонарным", то их "+" тоже "отфонарный".

Почему? Я родился 21.06.1982
Получая номер (к примеру, я не знаю точного метода генерации) 2106198200001012 (обратился за номером 1012 из тех, кто родился в этот день).


 
Sergey_Masloff   (2005-10-06 15:41) [57]

msguns ©   (06.10.05 15:15) [52]
>Если бы вместо "поле" прозвучало "указатель на физический адрес записи", >вопросов бы не было ;))
Ну, сами они (первоисточники) все же называют это полем. Хотя и "псевдо" ;-)

>Однако этот адрес - дело чисто сервера,- никакой клиент не может и не >должен его знать.
Знать может... Иногда полезно ;-) Тем более "клиентом" может быть и хранимая процедура на сервере

>Тем более, что это - величина далеко не постоянная ;)
Ну кто бы спорил...

Для интербейза классический пример с удалением дубликатов. Рекомендованый отцами - основателями (ну ладно, метерями - основательницами, учитывая пол Анны) вполне полагается на rdb$db_key

а уж в Oracle rowid используют все кому не лень


 
Sergey_Masloff   (2005-10-06 15:45) [58]

Андрей Жук ©   (06.10.05 15:31) [56]
>Почему? Я родился 21.06.1982
А я родился тоже 21.06.1982 (к примеру, на самом деле намного раньше) и обратился в тот же день. Только ты в Жмеринке а я в Ужописе (есть такой город, серьезно. Родился я правда не в нем). И кто из нас первый? Думаешь все идет через одну шахматку в гипотетической САМОЙ ГЛАВНОЙ налоговой инспекции? ;-)


 
Андрей Жук ©   (2005-10-06 15:46) [59]


> Думаешь все идет через одну шахматку в гипотетической
> САМОЙ ГЛАВНОЙ налоговой инспекции? ;-)

Да, запрос на получение кода отправляется в Киев, откуда и присылается обратно. А как же еще?


 
Курдль ©   (2005-10-06 15:47) [60]


> Sergey_Masloff   (06.10.05 15:41) [57]
> а уж в Oracle rowid используют все кому не лень

Я бы сказал "кому лень следовать правилам хорошего тона при работе с ораклом". Другое дело, что его используют многие классы (компоненты) доступа,  т.к. это удобное и очевидное средство привязки к записи.


 
Danilka ©   (2005-10-06 15:49) [61]

Андрей Жук ©   (06.10.05 15:46)

> Думаешь все идет через одну шахматку в гипотетической
> САМОЙ ГЛАВНОЙ налоговой инспекции? ;-)

Да, запрос на получение кода отправляется в Киев, откуда и присылается обратно. А как же еще?


Ну, например у нас первые 4 цифры это код налоговой. Остальные - незнаю.


 
Sergey13 ©   (2005-10-06 15:52) [62]

2[60] Курдль ©   (06.10.05 15:47)
Не находишь в своих двух предложениях непримиримого противоречия? 8-)


 
msguns ©   (2005-10-06 15:55) [63]

>Sergey_Masloff   (06.10.05 15:41) [57]
>Ну, сами они (первоисточники) все же называют это полем. Хотя и "псевдо" ;-)

Они могут называть этот указатель хоть горшком, от этого он не может быть полем записи, на которую указывает, физически, т.к. хранится сервером совершенно в другом месте, со всеми остальными своими "собратьями". Его можно назвать "полем" только опосредовано, имея в виду, что в кэше считанные записи валяются вместе со своими указателями. В этом случае можно этот указатель обозвать "полем". Однако после удаления записи из кэша, у нее тут же это поле "кастрируют". До следующего раза ;)

Кстати, в некоторых базах, например dbf, этот указатель имеет вполне конкретное смысловое наполнение и содержит порядковый номер записи в таблице.

И вообще, механизм "кластирования" данных - штука ноухавная, хотя, как я слышал, периодически тупо воруемая и модифицируемая ;)


 
Anatoly Podgoretsky ©   (2005-10-06 15:58) [64]

msguns ©   (06.10.05 15:55) [63]
И вроде бы во всех базах это неустойчиво и уж точно имеет совсем другое смысловое значение.


 
Sergey_Masloff   (2005-10-06 16:11) [65]

msguns ©   (06.10.05 15:55) [63]
>Они могут называть этот указатель хоть горшком, от этого он не может >быть полем записи, на которую указывает, физически, т.к. хранится >сервером совершенно в другом месте,
А, ну это очевидно. Кто ж спорит.
 Отсюда все же вытекает неудобность письменного общения - на словах мы б за 3 секунды выяснили кто что имеет в виду. Как пример этого - сегодня за буквально 5 минут решили проблему лежавшую тяжким камнем месяц. А стоило собраться вживую троим из трех соседних комнат. Переписывались - переписывались и не смогли друг другу объяснить суть проблемы. Вот такие пироги. В из пяти минут 30 секунд заняло изложение проблемы и поиск решения (очевидного) три с половиной минуты я шел к рабочему месту 40 секунд набирал команду и 0.216 сек работал Oracle. И настала феличита минимут трем отделам и одному филиалу


 
Курдль ©   (2005-10-06 16:15) [66]


> Sergey13 ©   (06.10.05 15:52) [62]
> Не находишь в своих двух предложениях непримиримого противоречия?

Нет. Одно дело - проектировщики классов доступа типа DOA, SQLDirect и т.п., которые не знают, к каким таблицам придется привязываться их классам и что там у них за ПК.
А другое - носители естественного интеллекта - проектировщики и кодировщики, которые на момент написания запросов точно знают, что за ПК в той или иной таблице.


 
Sergey13 ©   (2005-10-06 16:46) [67]

2[66] Курдль ©   (06.10.05 16:15)
Выходит у разработчиков DOA интелект неестественный. Не знал. Спасибо. 8-)


 
Курдль ©   (2005-10-06 16:51) [68]


> Sergey13 ©   (06.10.05 16:46) [67]
> 2[66] Курдль ©   (06.10.05 16:15)
> Выходит у разработчиков DOA интелект неестественный. Не
> знал. Спасибо. 8-)


Чувствуется окончание рабочего дня - по амплитуде отклонения от темы :)

Я имел в виду, что сами DOA не применяют искуственного интеллекта для поиска первичных ключей и т.п. в таблице для привязки к конкретной записи, а по-простецки берут Rowid и юзают.


 
Sergey13 ©   (2005-10-06 16:55) [69]

2[68] Курдль ©   (06.10.05 16:51)
>а по-простецки берут Rowid и юзают.
Я бы сказал корректно берут и корректно юзают. Но видимо
"Что положено Юпитеру, то не положено быку." (с) какой то бог вроде


 
msguns ©   (2005-10-06 17:02) [70]

>Курдль ©
>Sergey13 ©

А не пройти ли вам в "потрепацца" ?


 
Danilka ©   (2005-10-07 08:09) [71]

[70] msguns ©   (06.10.05 17:02)
>Курдль ©
>Sergey13 ©

А не пройти ли вам в "потрепацца" ?


А разве вопрос: "зачем мне примарикей?" это не вопрос для потрепаловки? :)



Страницы: 1 2 вся ветка

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

Наверх





Память: 0.61 MB
Время: 0.049 c
3-1128911358
DimonS
2005-10-10 06:29
2005.11.20
Вопрос по ADO+SQL


2-1131004169
Helen
2005-11-03 10:49
2005.11.20
Последняя нажатая клавиша


14-1130497437
штамм
2005-10-28 15:03
2005.11.20
На каком C приводятся примеры в Windows SDK ?


2-1130505625
gvv
2005-10-28 17:20
2005.11.20
График Gantt


6-1123507959
Lesha_
2005-08-08 17:32
2005.11.20
Работа с КПК через WiFi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский