Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Первичный ключ   Найти похожие ветки 

 
Игорь Шевченко ©   (2006-04-17 11:05) [80]

Внук ©   (16.04.06 10:56) [62]


> Будем вводить. По причине номер раз - для однообразия правил
> формирования таблиц, по причине номер два - для половины
> вводимой информации операторы не знают этих кодов, и знать
> не хотят.


Я ж говорю - с пуристами спорить - себе дороже. Зачем прах Оккама тревожить ?

vuk ©   (16.04.06 18:32) [65]


> Оно конечно да, но ведь этот ключ в базе потом наверняка
> еще и как внешний будет использоваться. А про то, что ИНН
> могут неверно вбить уже говорили.


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


> В конце концов можно посмотреть на проблему иначе. Уникальна
> конкретная личность, а ИНН - некий атрибут который ей государство
> присвоило и не дело нашей БД, что оно там присвоило и как
> сгенерило.


И, прости, в чем разница, государство сгенерировало или механизм СУБД ?


 
sniknik ©   (2006-04-17 11:37) [81]

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


 
Игорь Шевченко ©   (2006-04-17 11:40) [82]

sniknik ©   (17.04.06 11:37) [81]

Может, я чего здорово не понимаю, но в чем именно сложность ?


 
Игорь Шевченко ©   (2006-04-17 11:44) [83]

Кроме того, в случае синтетического ключа мне, теоретически, никто не мешает внести несколько одинаковых, ничем не отличающихся сущностей. Например, толпу людей с одинаковыми ИНН, ФИО и т.п.


 
Jeer ©   (2006-04-17 12:19) [84]

Игорь Шевченко ©   (17.04.06 11:44) [83]

Уникальный индекс ?

А вообще поддерживаю применение СК (по другому и не делал похоже никогда).


 
Игорь Шевченко ©   (2006-04-17 12:24) [85]

Jeer ©   (17.04.06 12:19) [84]

И зачем умножать сущности сверх необходимости ? Тенцера я читал, так что сслку на него в качестве аргумента можно не приводить


 
Jeer ©   (2006-04-17 12:28) [86]

Игорь Шевченко ©   (17.04.06 12:24) [85]


> зачем умножать сущности сверх необходимости


Для отделения мух от котлет.


> Тенцера я читал


Не сомневаюсь, однако это известно задолго до появления Тенцера.


 
Sergey13 ©   (2006-04-17 12:30) [87]

2[85] Игорь Шевченко ©   (17.04.06 12:24)
>И зачем умножать сущности сверх необходимости ?
Что бы обеспечить себе спокойную старость. 8-)
Ибо ничто не вечно под луной. (с)тырено
Сегодня есть ИНН, завтра нет его, а есть супер-ИНН. Мало ли.


 
vuk ©   (2006-04-17 12:34) [88]

to Игорь Шевченко ©   (17.04.06 11:05) [80]:
>Вбить могут неверно все, что угодно. И какая разница, неверно вобьют ИНН
>или имя, с точки зрения базы данных ?
>И, прости, в чем разница, государство сгенерировало или механизм СУБД ?
Мантра есть такая: "Foreign key... Foreign key..." :)
Имя мы уж точно в качестве PK не будем использовать, а вот к чему приведет использование криво вбитого ИНН в качестве FK, я думаю, понятно.  Конечно, можно поставить опцию каскадных обновлений.
Ну и еще, если говорить об ИНН в качестве PK, то можно вспомнить, что не у всех оно есть.
Про то, что кто-то может предпочесть не использовать в своей БД чужие идентификаторы в качестве ключевых, я уже упоминал. У нас, например, именно так и есть.

>Кроме того, в случае синтетического ключа мне, теоретически, никто не
>мешает внести несколько одинаковых, ничем не отличающихся сущностей.
Уникальные индексы на то есть. Кстати, в любом случае перед вставкой придется проверку делать, чтобы юзеров непонятными сообщениями сервера не пугать.


 
McSimm ©   (2006-04-17 12:34) [89]

жизнь немножко сложнее и непредсказуемее, чем твердая логика СУБД. логика "государства" тоже может отличаться от логики вообще...

все это может зависеть от конкретной задачи, конечно. могу добавить несколько аргументов кроме уже приведенных в пользу СК, на примере ИНН

- если ИНН использовать в качестве ключа, нет возможности разграничить секьюрити. например для какого-то рабочего места ИНН не должен быть доступен для просмотра.
- отсутствует возможность временно оставить поле незаполненными (на днях донесу документы),
- мне лично приходилось при заполнении документа вписывать 10 отфонарных цифр вместо реального ИНН, в связи с утверждением в первом абзаце этого поста. я попал в ситуацию, когда ИНН мне был необходим для того, чтобы получить ИНН.


 
Игорь Шевченко ©   (2006-04-17 12:40) [90]

Jeer ©   (17.04.06 12:28) [86]


> Для отделения мух от котлет.


С этого места подробнее, где мухи, а где котлеты ?

Sergey13 ©   (17.04.06 12:30) [87]


> Сегодня есть ИНН, завтра нет его, а есть супер-ИНН. Мало
> ли.


И что ? Я не понимаю, можно на примере пояснить ?

vuk ©   (17.04.06 12:34) [88]


> Мантра есть такая: "Foreign key... Foreign key..." :)


Да, каждое утро распеваем хором. И что с того ? Давай будем брать не ИНН - пес с ним, а тот самый вариант с кодировкой географии по ISO. Тоже будем ID вводить ?


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


Наверное все-таки непонятно, к чему приведет пользование криво вбитого ИНН. Расскажи.


 
McSimm ©   (2006-04-17 12:44) [91]


> к чему приведет пользование криво вбитого ИНН

сложно вносить изменения в поля первичного ключа.
в различных СУБД различная степень сложности


> вариант с кодировкой географии по ISO

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


 
boriskb ©   (2006-04-17 12:47) [92]

Объясните мне о чем спор?
О том, что существует (и не мало) случаев, когда в качестве первичного ключа можно использовать информативное поле базы? В этом есть сомнения?

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


 
Игорь Шевченко ©   (2006-04-17 12:48) [93]

McSimm ©   (17.04.06 12:44) [91]


> сложно вносить изменения в поля первичного ключа.
> в различных СУБД различная степень сложности


То есть, существуют СУБД, которые не позволяют изменить значение поля первичного ключа ? Или не обеспечивают соотвествующего обновления подчиненных таблиц ? :)


> кроме религиозных соображений


Об том, собственно, и речь. Любые разумные доводы обычно принимаются, а с религией спорить - нуегонафиг.


 
Суслик ©   (2006-04-17 12:48) [94]

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


 
Игорь Шевченко ©   (2006-04-17 12:48) [95]

Суслик ©   (17.04.06 12:48) [94]

Ты свое имхо пояснишь ?


 
Суслик ©   (2006-04-17 12:49) [96]


>  [95] Игорь Шевченко ©   (17.04.06 12:48)


> Ты свое имхо пояснишь ?

Про ИНН? Все просто. У меня вызывают сурьезные опасения последовательность принимающих законы в своих действиях. Не будет завтра ИНН. И что?


 
Jeer ©   (2006-04-17 12:50) [97]

Игорь Шевченко ©   (17.04.06 12:40) [90]


> С этого места подробнее, где мухи, а где котлеты ?


мухи - системный уровень (ID, relations)
котлеты - прикладной уровень.

Наличие и уникальность индекса по "котлетам" гарантирует от пользовательских ошибок, в данном случае.


 
Игорь Шевченко ©   (2006-04-17 12:50) [98]

Суслик ©   (17.04.06 12:49) [96]

Не будет ИНН - будет другая база, не так ли ?


 
Суслик ©   (2006-04-17 12:51) [99]


>  [98] Игорь Шевченко ©   (17.04.06 12:50)

почему?
Люди живы (или контрагенты), работают там же, какого лешего новая база?


 
Jeer ©   (2006-04-17 12:51) [100]

Игорь Шевченко ©   (17.04.06 12:48) [93]


> Или не обеспечивают соотвествующего обновления подчиненных
> таблиц ? :)


А то:)


 
Sergey13 ©   (2006-04-17 12:52) [101]

2[90] Игорь Шевченко ©   (17.04.06 12:40)
>И что ? Я не понимаю, можно на примере пояснить ?
Да ничего хорошего. Тут либо оставлять "старый ИНН" первичным ключом, но сделать его генеримым в системе, либо заполнять "новый ИНН" у всех записей (сколько их? Когда мы их все получим от клиентов?) и "переводить" систему на него. ИМХО, мало не покажется.
В случае с сурогатом - просто добавим еще одно поле и пропишем правила его заполнения.

>а тот самый вариант с кодировкой географии по ISO. Тоже будем ID вводить ?
Для некоторых данных, возможно, "живой" ключ вполне приемлем. Но, как правило (это из личного опыта), это данные второстепенные - небольшие справочники со стандартизованными данными.


 
Jeer ©   (2006-04-17 12:55) [102]

Sergey13 ©   (17.04.06 12:52) [101]


> со стандартизованными данными.


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


 
McSimm ©   (2006-04-17 12:57) [103]


> То есть, существуют СУБД, которые не позволяют изменить
> значение поля первичного ключа ? Или не обеспечивают соотвествующего
> обновления подчиненных таблиц ? :)

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

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


 
Игорь Шевченко ©   (2006-04-17 12:57) [104]

Суслик ©   (17.04.06 12:51) [99]


> почему?


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

Jeer ©   (17.04.06 12:50) [97]


> мухи - системный уровень (ID, relations)
> котлеты - прикладной уровень.


Мухами в данном случае ведает сама СУБД. Всякие там constraints и прочее.


> Наличие и уникальность индекса по "котлетам" гарантирует
> от пользовательских ошибок, в данном случае.


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


 
Суслик ©   (2006-04-17 12:58) [105]


> Пропадет индивидуальный номер налогоплательщика - те задачи
> потеряют смысл, не так ли ?

не так ли (и не имхо), налогоплательщик то остался.


 
McSimm ©   (2006-04-17 13:00) [106]


> идентификация по ИНН годится только для вполне вполне определенного
> ряда задач

согласен.
это может быть, например, сама база налогоплательщиков.


 
Суслик ©   (2006-04-17 13:02) [107]


> согласен.
> это может быть, например, сама база налогоплательщиков.

Да почему? ИНН это одно, налогоплательщик другое.
Если убрать номера автомашин, то что машины уберутся?


 
Суслик ©   (2006-04-17 13:03) [108]


> согласен.
> это может быть, например, сама база налогоплательщиков.

Скорее не "налогоплательщиков", а "налогоплательщиков, получисших ИНН".
Это верно


 
Игорь Шевченко ©   (2006-04-17 13:04) [109]

McSimm ©   (17.04.06 12:57) [103]


> конечно есть.
> но даже если обеспечивают, это может оказаться довольно
> сложной операцией, по сравнению с единственным изменением
> поля в единственном справочнике.
>
> на мой взгляд доводов достаточно.


Извини, не понимаю. Можно иллюстрацию ?


> Насколько я понимаю, ИНН - приватная информация.  и легко
> представить ситуацию, когда не все имеющие доступ к справочнику
> клиентов имеют право видеть все поля


То есть, когда он на кассовом чеке печатается, там приватность не имеет значения, а когда в базе данных, то имеет ? :)

И еще, ко всем - очень трудно схему базы данных рассматривать в отрыве от задач, решаемых с ее помощью. Для общих случаев одинаково неверны и те и другие рекомендации, чаще всего.


 
McSimm ©   (2006-04-17 13:05) [110]


> Для общих случаев одинаково неверны и те и другие рекомендации,
>  чаще всего.

совершенно согласен


 
Игорь Шевченко ©   (2006-04-17 13:05) [111]

Суслик ©   (17.04.06 13:02) [107]


> Да почему? ИНН это одно, налогоплательщик другое.
> Если убрать номера автомашин, то что машины уберутся?


Нет, машины не уберутся. Но отличить их одну от другой станет заведомо труднее.


 
boriskb ©   (2006-04-17 13:11) [112]

Игорь Шевченко ©   (17.04.06 13:04) [109]
очень трудно схему базы данных рассматривать в отрыве от задач, решаемых с ее помощью


Так и я про тоже!
Причем здесь ИНН??
Где то он может быть первичным ключом, а где то не может
Разве это не очевидно?


 
Jeer ©   (2006-04-17 13:11) [113]

Игорь Шевченко ©   (17.04.06 12:57) [104]


> Мухами в данном случае ведает сама СУБД. Всякие там constraints
> и прочее.


Если может, то - да.
Но иногда и не может:))
А чаще и constraint не помогает и лучше на ХП или на клиенте делать ограничения.


> От каких ошибок может гарантировать внедрение уникального
> синтетического ключа ?


Не синтетического, а сложного индекса по прикладным полям.


 
Sergey13 ©   (2006-04-17 13:13) [114]

2[109] Игорь Шевченко ©   (17.04.06 13:04)
> Извини, не понимаю. Можно иллюстрацию ?
Оракл не дает апдейтить каскадно ключ по констрейнту. Можно конечно  извратиться, но если по диапазонам ПК, например, настроены партиции, то прикинь во что выльется подобная перекодировка.


 
Игорь Шевченко ©   (2006-04-17 13:15) [115]

Jeer ©   (17.04.06 13:11) [113]


> А чаще и constraint не помогает и лучше на ХП или на клиенте
> делать ограничения


Странно. А зачем тогда их (constraints) придумали ? :)


> Не синтетического, а сложного индекса по прикладным полям.


Сложный индекс по прикладным полям - это хорошо. Но не всегда уместно. Возьмем тут же географию по ISO - какие тут можно придумать сложные индексы по прикладным полям, а главное, зачем ? :)


 
Jeer ©   (2006-04-17 13:23) [116]

Из личных ощущений и практики:

- ФК применяется тогда, когда целесообразно сохранять историю "введения" поля в связанные документы
Пример:
Есть таблица ФАМИЛИИ
Если используется ФК, то в таблицу ПЕРСОНАЛ попадает именно фамилия, а дальнейшее изменение ее в таблице ФАМИЛИИ не приводит к автоматическому изменению в ПЕРСОНАЛ.
Т.е. имеем связь на момент добавления записи в ПЕРСОНАЛ и ее отсутствие в остальное время.
Применение СК же в этом случае приведет к автоматическому изменению фамилии во всех связанных по ID документах.

- СК применяется во всех остальных случаях.


 
Игорь Шевченко ©   (2006-04-17 13:23) [117]

Sergey13 ©   (17.04.06 13:13) [114]


> Оракл не дает апдейтить каскадно ключ по констрейнту.


Ну да. Принимается :)


 
Sergey13 ©   (2006-04-17 13:26) [118]

2[109] Игорь Шевченко ©   (17.04.06 13:04)
> Для общих случаев одинаково неверны и те и другие рекомендации, чаще всего.
Вобщем да. Но сурогаты будут надежно работать в любой системе, несмотря на некоторое возможное излищество. А живые ключи не в любой системе возможны. А еще хуже, когда сначала вроде возможны, а потом, с развитием или просто течением времени, выясняется, что...
ИМХО.


 
Игорь Шевченко ©   (2006-04-17 13:28) [119]

Sergey13 ©   (17.04.06 13:26) [118]


> Вобщем да. Но сурогаты будут надежно работать в любой системе,
>  несмотря на некоторое возможное излищество. А живые ключи
> не в любой системе возможны


Здрасьте вам. Это как же живые ключи не в любой системе возможны ? :)


 
Jeer ©   (2006-04-17 13:31) [120]

Игорь Шевченко ©   (17.04.06 13:15) [115]

Не у всех СУБД это есть, не у всех работает так, как хочется:))


> Возьмем тут же географию по ISO - какие тут можно придумать
> сложные индексы по прикладным полям, а главное, зачем ?
> :)


Из соображений единообразности работы с таблицами все же ввести ID (PK)
Сложный индекс тут и не нужен.
Но, к примеру, справочник стандартных обозначений чего-то на локальном и англ. языках - что будет PK ?

Как-то эксперементировал с объектным подходом при работе с таблицами.
Такая структура таблицы
ID
[IDL]
NAME
UID
DATER

была использована как базовый класс.



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.72 MB
Время: 0.065 c
15-1145868036
Looser
2006-04-24 12:40
2006.05.21
вопрос не по дельфи


15-1145979821
Картинки
2006-04-25 19:43
2006.05.21
Скрин-шоты


15-1145813248
Volf_555
2006-04-23 21:27
2006.05.21
Какой посоветуете PHP - редактор?


2-1146371914
Muha89
2006-04-30 08:38
2006.05.21
Выделение мышью


15-1145862159
DelphiN!
2006-04-24 11:02
2006.05.21
Закладки в IE как в Опере