|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
Вопрос создан после сообщения Garya Кто-то слышал хоть об одном успешном внедрении SAP R/3 в СНГ? Хотелось бы спросить уважаемых участников. Что вы думаете по поводу использования таких ключей в ERP-системах? Для затравки статья http://www.akzhan.midi.ru/devcorner/articles/naturalKeysVersusAtrificialKeysByTentser.html ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 11:01 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
Ну, тема эта суперобширна... :) И ее уже обсуждали на форуме по MS SQL, и не раз. Если поиск запустить, то в глазах рябить начинает... Обсуждение же ее, имхо, можно сравнить с выяснением, что раньше появилось - курица или яйцо. :) Вопрос, имхо, философский. И только поэтому поднявший его заслуживает участи Джордано Бруно... Шутка :) Я не могу быть объективным при обсуждении данной темы, поскольку принимал участие в работе над проектом, ориентированном на сверхдинамичность среды (можно посмотреть презентацию , кому интересно). Я являюсь сторонником суррогатных ключей, но лишь потому, что живу в условиях этого самого сверхдинамизма. Я много раз набивал себе шишку (полагаю, не только я), когда изменялись банковские реквизиты у организации, когда организация изменяла наименование, когда люди изменяли фамилию или номер паспорта. С моей индивидуальной точки зрения с точки зрения систематики невозможно четко идентифицировать понятие "объект" или "субъект" так, чтобы какая-либо автоматизированная система смогла бы отличать его от другого аналогичного объекта без помощи самого человека. Эти в существенной степени философский вопрос, и его рассмотрение обычно решается в ту или иную сторону в зависимости от контекста и на интеллектуальном уровне. Иванов И.И. в возрасте 3-х лет и в возрасте 60 лет - это один объект или разные? В них нет ни одной общей молекулы (которые уже сменились дважды). Он сменил номер паспорта - 5 раз, фамилию - 4 раза, гражданство - 3 раза, пол - один раз. И все-таки это один объект или разные? Если положительно ответить на этот вопрос, то при поиске тех естественных составляющих, которые-таки являются едиными и неизменными для этого объекта-субъекта, можно забраться в мистические и религиозные области, которые пока ( ) не поддаются автоматизации и четкой систематизации. Поэтому я являюсь сторонником суррогатных ключей. Пусть пользователь изменяет какие угодно реквизиты. Пока СК остается неизменным, это подразумевает оперирование одним и тем же объектом. С ЕК такое не прокатит. Я уже не говорю о том, что населенный пункт с названием "Москва" в мире далеко не один. Для того, чтобы обозначить ОДНОЗНАЧНО, какой именно имеется в виду, нужно к наименованию прикрутить страну, в которой он находится, вид населенного пункра (поселок городского типа, деревня, аул, кишлак, мегаполис...), географические координаты... А через некоторое время выяснится, что нужно еще уточнять, о координатах в системе какой именно планеты идет речь. ВСЕ эти проблемы решаются одним легким движением - введением суррогатного ключа. Но я не настаиваю на своем мнении. Подчеркиваю, это вопрос ФИЛОСОФСКИЙ, а у философских вопросов однозначных ответов никогда не существовало... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 12:06 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
GaryaС моей индивидуальной точки зрения с точки зрения систематики невозможно четко идентифицировать понятие "объект" или "субъект" так, чтобы какая-либо автоматизированная система смогла бы отличать его от другого аналогичного объекта без помощи самого человека. Эти в существенной степени философский вопрос, и его рассмотрение обычно решается в ту или иную сторону в зависимости от контекста и на интеллектуальном уровне. Иванов И.И. в возрасте 3-х лет и в возрасте 60 лет - это один объект или разные? В них нет ни одной общей молекулы (которые уже сменились дважды). Он сменил номер паспорта - 5 раз, фамилию - 4 раза, гражданство - 3 раза, пол - один раз. И все-таки это один объект или разные? Если положительно ответить на этот вопрос, то при поиске тех естественных составляющих, которые-таки являются едиными и неизменными для этого объекта-субъекта, можно забраться в мистические и религиозные области, которые пока ( ) не поддаются автоматизации и четкой систематизации Дело не в философии, но возможно в... мистике. Человек был создан Богом, чтобы всему сущему дать имена. Имя - это не просто идентификатор, а смысловое выжение сущности. При рассмотрении в такой плоскости проблема выглядит иначе: если мы можем понять и передать смысл, то есть шанс воспользоваться естественным ключом, в противном случае неизбежно придется использовать суррогатный ключ. GaryaПоэтому я являюсь сторонником суррогатных ключей. Пусть пользователь изменяет какие угодно реквизиты. Пока СК остается неизменным, это подразумевает оперирование одним и тем же объектом. С ЕК такое не прокатитВозможно, было бы правильным рассмотреть две стороны первичного ключа. С первой стороны, первичный ключ - это уникальная метка. И нет никакой разницы является ли эта метка внутренней или внешней. Со второй стороны, первичный ключ - это элемент взаимосвязи между сущностями. И порой, лишая смысла первичный ключ, мы лишаем смысла и связи, в которых принимает участие данная сущность. Информация в системе становится недостоверной или система усложняется, поскольку достверность приходится обеспечивать дополнительными средствами. GaryaЯ уже не говорю о том, что населенный пункт с названием "Москва" в мире далеко не один. Для того, чтобы обозначить ОДНОЗНАЧНО, какой именно имеется в виду, нужно к наименованию прикрутить страну, в которой он находится, вид населенного пункра (поселок городского типа, деревня, аул, кишлак, мегаполис...), географические координаты... Вполне достаточно координат. GaryaА через некоторое время выяснится, что нужно еще уточнять, о координатах в системе какой именно планеты идет речь. ВСЕ эти проблемы решаются одним легким движением - введением суррогатного ключа Если на этапе проектирования нет представления о том, для какого уровня создается система, то здесь никакой суррогатный ключ не спасет... Кроме того, суррогатный ключ не столько решает проблемы, сколько создает их. Можно, например, пользуясь суррогатным ключем завести 100 раз один и тот же город? Можно. Можно завести два разных города по одним и тем же координатам? Можно. Так чем же помогает суррогатный ключ? GaryaНо я не настаиваю на своем мнении. Подчеркиваю, это вопрос ФИЛОСОФСКИЙ, а у философских вопросов однозначных ответов никогда не существовало... :)Философия бывает разной... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 13:02 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
GaryaНу, тема эта суперобширна... :) И ее уже обсуждали на форуме по MS SQL, и не раз... Спасибо. Обязательно почитаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 13:12 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
2 ASU. Все меняется... (не помню, кто сказал). Если бы я жил НЕ в России, где все меняется в режиме быстрой перемотки, то, может быть, мое мнение по этому вопросы было менее категоричным. В свое время мне пришлось решать такую проблему. Изменились НАШИ банковские реквизиты (я уже не говорю о чужих). Нужно сделать так, чтобы старые документы распечатывались со старыми реквизитами, а новые - с новыми. Когда кто-то из сотрудников меняет фамилию или имя, то меня, как "асунизатора", вообще не должно волнововать, по какой причине это произошло. Вышел ли кто-то замуж, или ему опостылело имя "Канализация", которое родители дали, посчитав, что оно красиво звучит (кстати, вполне реальный случай). Для организации, где я работаю, важно, что это один и тот же человек. ПОЧЕМУ мы считаем Настью и Канализацию одним и тем же человеком - это не должно интересовать информационную систему. Эта наша, человеческая область. Если мы посчитаем, что это разные сущности, мы введем их дважды, даже если у них одинаковый номер паспорта. Может быть, мы ХОТИМ видеть одного и того же человека, как двух разных. Это не КИСкино дело! Имхо, конечно. ASUС первой стороны, первичный ключ - это уникальная метка. И нет никакой разницы является ли эта метка внутренней или внешней. Со второй стороны, первичный ключ - это элемент взаимосвязи между сущностями. И порой, лишая смысла первичный ключ, мы лишаем смысла и связи, в которых принимает участие данная сущность. Очень правильные слова! Если мы используем СК, то мы вольны придавать смысл сущности тот, который пожелаем. Когда мы используем ЕК, то у нас уже нет такой свободы. Есть искусствено притянутые за уши ограничения, который, возможно, оправдываются в большинстве ситуаций, но достаточно одной нестандартной ситуации, чтобы оказаться в полному тупике, выяснив, что ЕК совскем не такой уж "естественный", как казалось раньше. ASUВполне достаточно координат. Увы, не достаточно. Один введет координаты мавзолея Ленина на Красной площади, другой - геометрического центра Москвы (который по мере ее застройки постоянно перемещается). И они окажутся разными. А для ключа это недопустимо. Кроме того, использование координат с точки зрения соответствия практическим манипулированием информацией НЕЕСТЕСТВЕННО . Эту информацию пользователю-колотильщику по клавиатуре НЕГДЕ ВЗЯТЬ. Конечно, можно заставить вместо наименований населенных пунктов вводить коды ОКАТО. Но пока они научатся в них ориентироваться... И потом, для меня был как гром среди ясного неба, когда я узнал, что для целых регионов в России с некоторого времени коды ОКАТО изменились. ASUЕсли на этапе проектирования нет представления о том, для какого уровня создается система, то здесь никакой суррогатный ключ не спасет... Вопрос спорный, определяется степенью предсказуемости изменений. Нас интересует НАСЕЛЕННЫЙ ПУНКТ , в котором находится контрагент, и АРЕАЛ, где он находится. Под словом "АРЕАЛ" можно понимать вещи совершенно разные для разных видов анализа. И заранее трудно сказать, что под ним будет подразумеваться. Если мы обозначим населенный пункт ТОЛЬКО наименованием, то попадем в тупик, когда узнаем, что Москва есть еще и в Америке, с поставщиком из которой мы стали работать недавно. Если мы в качестве уточняющей информации добавим понятие "Страна", то попадем в тупик, узнав, что в России Москва далеко не единственная. Какой выход? Создается суррогатный ключ и поле "примечание". Вот в примечании мы и напишем, чем эта Москва отличается от двух остальных, если нам не хватает базовых полей для описания отличий этих сущностей. И наша система будет нормально фунциклировать с треми Москвами, и выдаст корректно информацию о деятельности по странам, когда мы ее запросим. И даже по регионам России, если она есть. Далее, встает традиционный ворпос о длине ключа. Для того, чтобы ЕСТЕСТВЕННЫЙ ключ сделать гарантированно уникально описывающим сущность, в идеале в него приходится включать практически все поля-атрибуты сущности (разве не так?). О какой эффективности тут можно говорить, о какой нормализации? авторМожно, например, пользуясь суррогатным ключем завести 100 раз один и тот же город? Можно. Можно завести два разных города по одним и тем же координатам? Можно. Так чем же помогает суррогатный ключ? Имхо, не следует смешивать логику проверки на допустимость операции с логикой отношения между объектами. Если действительно существуют 100 городо в с одним и тем же наименованием, то это действительно мы должны иметь возможность сделать. Если вероятность такого события довольно мала, то в логику работы программы мы можем ввести вывод предупреждающего сообщения, что город с подобным именем уже существует в 99 экземплярах (и предложить выбрать один из них, на случай, если пользователь согласится использовать существующий экземпляр). Можно просто запретить вводить повторяющиеся наименования. Но когда возникнет необходимость все-таки ввести повторяющиеся наименования, эта проблема решится в две секунды устранением ранее введенного ограничения. Но при этом логика связей между сущностями (как мы, человеки-юзеры ее себе понимаем) не пострадает. И структура данных останется без изменения. А что делать, когда ты использовал поле "Name" в качестве ЕК, а через 2 года эксплуатации выяснилось, что нужно ввести записи с повторяющимся значением поля "Name"? Кроме того, ЕК сам по себе не спасает от дублирования информации (знаю это по богатому опыту). Пользователь, привыкший к реакции системы на повторяющиеся имена, обязательно введет десяток вариаций одного и того же имени со всеми видами опечаток. Разные пользователи название "ЗАО НПП СКБ "Прогресс" введут с разным количеством кавычек, пробелов, с подбробными или сокращенными расшифровками аббревиатур, с переставленными и опущенными частями имени. Так что ЕК от этой проблемы как таковой не спасает. Эта проблема - совсем другая проблема. И ее решение требует отдельного рассмотрения. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 14:18 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
еще. не прочитал, конечно... но... уж очень дорого иметь в системе суррогатные ключи... слишком много join'ов приходится делать вместо простого select'а... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 14:33 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
2 mazzy. И у того, и у этого подхода имеются и плюсы, и минусы. Имхо, их нужно рассматривать в совокупности. Лично я - сторонник суррогатных ключей. А пишется ли запрос в одну строчку или в две, имхо, это вообще дело десятое. Пользователь врядли будет писать даже простейший select * from .... Для него это китайская грамота. Гораздо важнее, с какой скоростью этот запрос работает. Ключ автоматом подразумевает индес. Что это за индекс, размер которого приближается к размеру записи? Какой смыслв подобном индексе? В названии индийского города "Тируванатапурам" - 13 символов. В названии "Ростов-на-Дону" - 14. Добавь к ним еще название страны, долготу и широту... Ну и ключище получится! И на все это нужно будет ссылаться, ПОВТОРЯЯ во всех ссылках все содержимое составного ключа... Можно ли считать нормализованной таблицу, которая "ссылается" на подобный ключ? С какой скоростью будут работать запросы с JOIN, когда JOIN действительно понадобится? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 14:54 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
формировать по типу коротких имен в DOS. и человеку понятно, и уникальность гарантируется... как бы сюда картинку вставить... вот ссылка на картинку http://forum.mazzy.ru/uploads/post-9-1085580825.png хотя согласен, что это тоже компромисс... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 15:04 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
Mazzyно... уж очень дорого иметь в системе суррогатные ключи... слишком много join'ов приходится делать вместо простого select'а... Чувствуется подход из Axapta & 1С. Неплохая статья на эту тему http://emanual.ru/download2/3602.html ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 16:11 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
GaryaВсе меняется... (не помню, кто сказал). Если бы я жил НЕ в России, где все меняется в режиме быстрой перемотки, то, может быть, мое мнение по этому вопросы было менее категоричнымНе очень понятна ссылка на Россию. Древние восточные философы говорили: “Все – есть перемены”. Но как перемены связаны с темой? GaryaВ свое время мне пришлось решать такую проблему. Изменились НАШИ банковские реквизиты (я уже не говорю о чужих). Нужно сделать так, чтобы старые документы распечатывались со старыми реквизитами, а новые - с новымиИ в чем проблема? По всей видимости в ошибке проектирования. Но эта ошибка легко поправима: надо добавить к таблице поле (ALTER TABLE ADD...), где у старой записи сохранить ссылку на новую запись. Обе записи стали полноправны, для старых документов будет актуальна старая запись, для новых – новая. GaryaКогда кто-то из сотрудников меняет фамилию или имя, то меня, как "асунизатора", вообще не должно волнововать, по какой причине это произошло. Вышел ли кто-то замуж, или ему опостылело имя "Канализация", которое родители дали, посчитав, что оно красиво звучит (кстати, вполне реальный случай). Для организации, где я работаю, важно, что это один и тот же человек. ПОЧЕМУ мы считаем Настью и Канализацию одним и тем же человеком - это не должно интересовать информационную систему. Эта наша, человеческая область. Если мы посчитаем, что это разные сущности, мы введем их дважды, даже если у них одинаковый номер паспорта. Может быть, мы ХОТИМ видеть одного и того же человека, как двух разных. Это не КИСкино дело! Имхо, конечноС чего Вы решили, что любые атрибуты могут выступать в качестве первичного ключа? Для однозначной идентификации сотрудника организации существует “Табельный номер”. Наверное, надо было познакомиться с предметной областью более глубоко, прежде, чем браться за автоматизацию. Garya ASUС первой стороны, первичный ключ - это уникальная метка. И нет никакой разницы является ли эта метка внутренней или внешней. Со второй стороны, первичный ключ - это элемент взаимосвязи между сущностями. И порой, лишая смысла первичный ключ, мы лишаем смысла и связи, в которых принимает участие данная сущностьОчень правильные слова! Если мы используем СК, то мы вольны придавать смысл сущности тот, который пожелаем. Когда мы используем ЕК, то у нас уже нет такой свободыН-да... А как же быть с предметной областью? В ней уже дан смысл каждой сущности, в противном случае, этих сущностей просто бы не существовало. С таким подходом к проектированию, придется и предметную область свою придумывать и ее... пользователей. GaryaЕсть искусствено притянутые за уши ограничения, который, возможно, оправдываются в большинстве ситуаций, но достаточно одной нестандартной ситуации, чтобы оказаться в полному тупике, выяснив, что ЕК совскем не такой уж "естественный", как казалось раньшеМожно пример. Garya ASUВполне достаточно координат Увы, не достаточно. Один введет координаты мавзолея Ленина на Красной площади, другой - геометрического центра Москвы (который по мере ее застройки постоянно перемещается)Координаты в терминах долготы и широты образуют уникальное значение для любого предмета на поверхности Земли. Если предметная область требует еще и вертикальной координаты, то ее надо ввести на этапе проектирования. GaryaИ они окажутся разными. А для ключа это недопустимоНе выдумывайте, пожалуйста. GaryaКроме того, использование координат с точки зрения соответствия практическим манипулированием информацией НЕЕСТЕСТВЕННО . Эту информацию пользователю-колотильщику по клавиатуре НЕГДЕ ВЗЯТЬ. Конечно, можно заставить вместо наименований населенных пунктов вводить коды ОКАТО. Но пока они научатся в них ориентироваться... И потом, для меня был как гром среди ясного неба, когда я узнал, что для целых регионов в России с некоторого времени коды ОКАТО изменились И что страшного произошло? Изменились, ну, и что? Два населенных пункта стали иметь один и тот же код? Garya ASUЕсли на этапе проектирования нет представления о том, для какого уровня создается система, то здесь никакой суррогатный ключ не спасет...Вопрос спорный, определяется степенью предсказуемости изменений. Нас интересует НАСЕЛЕННЫЙ ПУНКТ , в котором находится контрагент, и АРЕАЛ, где он находится. Под словом "АРЕАЛ" можно понимать вещи совершенно разные для разных видов анализа. И заранее трудно сказать, что под ним будет подразумеватьсяНаверное, в этом и проблема - не изученность предметной области. В таком случае невозможно отвечать за достоверность информации в базе данных. GaryaЕсли мы обозначим населенный пункт ТОЛЬКО наименованием, то попадем в тупик, когда узнаем, что Москва есть еще и в Америке, с поставщиком из которой мы стали работать недавно. Если мы в качестве уточняющей информации добавим понятие "Страна", то попадем в тупик, узнав, что в России Москва далеко не единственная. Какой выход? Создается суррогатный ключ и поле "примечание". Вот в примечании мы и напишем, чем эта Москва отличается от двух остальных, если нам не хватает базовых полей для описания отличий этих сущностей. И наша система будет нормально фунциклировать с треми Москвами, и выдаст корректно информацию о деятельности по странам, когда мы ее запросим. И даже по регионам России, если она естьВы говорите о проблеме изучения предметной области? Или о том, как свои проблемы перекладывать на плечи пользователей? GaryaДалее, встает традиционный ворпос о длине ключа. Для того, чтобы ЕСТЕСТВЕННЫЙ ключ сделать гарантированно уникально описывающим сущность, в идеале в него приходится включать практически все поля-атрибуты сущности (разве не так?). О какой эффективности тут можно говорить, о какой нормализации?Хм... Вы что-то знаете о нормализации? Сомневаюсь. Нормализация не имеет отношения к вопросу выбора ключа по той простой причине, что нормализация проводится после того, как ключ выбран (определены функциональные зависимости, найдены детерминанты и выбран ключи из потенциальных ключей). Вопрос о длине ключа является надуманным. Естественный ключ может быть больше или меньше суррогатного ключа. Например, для стран и валют есть принятые международным сообществом аббревиатуры размером в 2-3 символа. Суррогатный ключ будет иметь размер принятый в данной СУБД (4-8 байт). В задачи ключа не входит экономить место, его задача однозначно идентифицировать кортеж. Garya авторМожно, например, пользуясь суррогатным ключем завести 100 раз один и тот же город? Можно. Можно завести два разных города по одним и тем же координатам? Можно. Так чем же помогает суррогатный ключ? Имхо, не следует смешивать логику проверки на допустимость операции с логикой отношения между объектамиЧего? Простите, но что такое “допустимость операций”? GaryaЕсли действительно существуют 100 городо в с одним и тем же наименованиемПростите, но я говорил не о множестве городов с одним именем, а о том, что один и тот же город заводят в БД много раз. Разницу понимаете? GaryaА что делать, когда ты использовал поле "Name" в качестве ЕК, а через 2 года эксплуатации выяснилось, что нужно ввести записи с повторяющимся значением поля "Name"?Если я использую в качестве ключа набор атрибутов не обеспечивающий уникальности, то мне придется признать, что я напрасно ем хлеб проектировщика БД. Но за всю мою жизнь, ни разу такого не случалось (проектированием БД я занимаюсь порядка 20 лет). GaryaКроме того, ЕК сам по себе не спасает от дублирования информации (знаю это по богатому опыту)Он так же не спасает ни от лени, ни от глупости, ни от головной боли. А разве должен? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 16:21 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
А вот ещё статья в тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 16:34 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
Павел ВоронцовА вот ещё статья в тему. не работает ссылка что-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 16:59 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
Ну вот, чего я боялся, то и произошло. Разговор дошел до флуда. Это тема такая... Ладно, продолжим... ASUНе очень понятна ссылка на Россию. Древние восточные философы говорили: “Все – есть перемены”. Но как перемены связаны с темой? По моим подсчетам форма счета-фактуры изменялась на протяжении одного года 5 раз. И это было в России. Сам документ "счет-фактура" является специальным первичным документом только для одного вида налога - НДС. У нас еще есть резервные возможности в этом направлении - завести под каждый вид налога отдельный вид первичных документов. Накладная, в которой повторяется 90% атрибутики счета-фактуры для этого вида налога принимается только СОВМЕСТНО со счетом-фактурой. Только в одной стране на одно и то же основное средство расчитывается две разные амортизации - для бухучета и для налогового учета. Глубинный смысл этого таинственного деяния не понимает никто, даже те, кто это придумал. Сначала вводится спецналог, потом несколько раз изменяется его ставка, потом отменяется... Смысл? Сначала воодится налог с продаж, потом несколько раз меняется его ставка, потом отменяется. Смысл? Продолжать, или хватит? авторИ в чем проблема? По всей видимости в ошибке проектирования. Но эта ошибка легко поправима: надо добавить к таблице поле (ALTER TABLE ADD...), где у старой записи сохранить ссылку на новую запись. Обе записи стали полноправны, для старых документов будет актуальна старая запись, для новых – новая. Имеется движение, связанное с этими записями. И это движение ссылается на разные записи. Нужно прилично извернуться, чтобы система догадалась объединить обороты по этим записям в одну кучу, поскольку они относятся к одной и той же сущности. Это не совсем ошибка проектирования. Это относится, вообще-то, к аспекту недочетов реляционной модели, которая предлагает рассматривать кортежи как набор атрибутов сущностей, "забывая" о том, что атрибуты у одних и тех же сущностей могут изменяться, и историю этих изменений зачастую необходимо хранить не просто в каком-то регистрационном журнале, а в самой модели. авторС чего Вы решили, что любые атрибуты могут выступать в качестве первичного ключа? Для однозначной идентификации сотрудника организации существует “Табельный номер”. Наверное, надо было познакомиться с предметной областью более глубоко, прежде, чем браться за автоматизацию. Правда!? А я не знал А теперь увольте этого сотрудника и через пару месяцев снова примите обратно на работу под новым табельным номером (только не говорите, что отдел кадров где-то принимаемому на работу сотруднику присваивает прежний табельный номер). А после объясните фискальщикам, почему НДФЛ нарастающим итогом по одному и тому же человеку некорректно рассчитался... ASUН-да... А как же быть с предметной областью? В ней уже дан смысл каждой сущности, в противном случае, этих сущностей просто бы не существовало. С таким подходом к проектированию, придется и предметную область свою придумывать и ее... пользователей. Ну есть сущность "организация". Вне зависимости от существования или НЕ существования ИНН, КПП, кодов ВЭД, ОКПО, ОКОНХ и многих других. Если наши законодатели придумают новый 20-значный или 200-значный код, в котором объединят все эти коды, то что изменится в предметной области, кроме того, что для данной сущности появился новый атрибут, которого раньше не было? Какие кардинальные изменения произошли в отношениях между сущностями? ASUКоординаты в терминах долготы и широты образуют уникальное значение для любого предмета на поверхности Земли. Если предметная область требует еще и вертикальной координаты, то ее надо ввести на этапе проектирования. А не могли бы Вы указать конкретные координаты долготы и широты объекта "Москва"? Интересно, сколько времени Вы будете искать ответ на этот вопрос. И еще интереснее, что любые координаты - это положение ТОЧКИ. А Москва - это далеко не точка (это я и пытался объяснить). Из одного конца в другой можно ехать аж полдня. И если два юзера укажут координаты двух РАЗНЫХ точек, которые хоть и находятся в пределах Москвы, но образуют РАЗНЫЕ значения первичного ключа. ASUВы что-то знаете о нормализации? Сомневаюсь. Нормализация не имеет отношения к вопросу выбора ключа по той простой причине, что нормализация проводится после того, как ключ выбран (определены функциональные зависимости, найдены детерминанты и выбран ключи из потенциальных ключей). Вообще-то, если в первичный ключ включить вообще все поля вообще всех таблиц, то можно считать, что они уже автоматом нормализованы. Теоретически это так, и спорить я тут не стану. Вопрос только в том, кому нужна такая нормализация. Нормализируют таблицы обычно с определенными целями, которых в данном случае я не наблюдаю. ASUВ задачи ключа не входит экономить место, его задача однозначно идентифицировать кортеж. Тогда почему бы в качестве ключа не использовать содержимое всех полей записи? Кроме теории есть еще практика... авторЧего? Простите, но что такое “допустимость операций”? Если мы, например, не хотим допустить появления в БД двух городов с одинаковым именем, то для этого совсем не обязательно имя города превращать в первичный ключ. Это можно сделать множеством иных способов. ASUПростите, но я говорил не о множестве городов с одним именем, а о том, что один и тот же город заводят в БД много раз. Разницу понимаете? Понимаю. И на это я уже ответил: GaryaЕК сам по себе не спасает от дублирования информации (знаю это по богатому опыту). Пользователь, привыкший к реакции системы на повторяющиеся имена, обязательно введет десяток вариаций одного и того же имени со всеми видами опечаток. Разные пользователи название "ЗАО НПП СКБ "Прогресс" введут с разным количеством кавычек, пробелов, с подбробными или сокращенными расшифровками аббревиатур, с переставленными и опущенными частями имени. Так что ЕК от этой проблемы как таковой не спасает. Эта проблема - совсем другая проблема. И ее решение требует отдельного рассмотрения. ASUЕсли я использую в качестве ключа набор атрибутов не обеспечивающий уникальности, то мне придется признать, что я напрасно ем хлеб проектировщика БД. Но за всю мою жизнь, ни разу такого не случалось (проектированием БД я занимаюсь порядка 20 лет). Неужели ваши пользователи никогда не делают опечаток? ASUОн так же не спасает ни от лени, ни от глупости, ни от головной боли. А разве должен? Нет не должен. Потому я и подчеркнул, причины появления дублирующихся записей - это тема другого разговора. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 17:02 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
SeVa Mazzyно... уж очень дорого иметь в системе суррогатные ключи... слишком много join'ов приходится делать вместо простого select'а... Чувствуется подход из Axapta & 1С. Неплохая статья на эту тему http://emanual.ru/download2/3602.html В общем то да. А где еще такая проблема возникает? Где еще, кроме 1С, широко используются суррогатные ключи? Garya, у вас теоретический подход или вы знаете реализацию кроме 1С? (Извините, тот длинный топик я распечатал, но еще не прочитал) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 17:11 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
mazzy SeVa[quot Mazzy]но... уж очень дорого иметь в системе суррогатные ключи... слишком много join'ов приходится делать вместо простого select'а... Garya, у вас теоретический подход или вы знаете реализацию кроме 1С? (Извините, тот длинный топик я распечатал, но еще не прочитал) На самом деле СК - "единственно верное учение" :) Реализаций-то масса, а что толку, если структура и ядро системы уже заточены на естественные ключи ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 17:27 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
MazzyGarya, у вас теоретический подход или вы знаете реализацию кроме 1С? Не уверен, что понял вопрос. Я участвовал в работе над проектом, в котором был реализован подход полной модифицируемости любых атрибутов объектов, а также добавления атрибутов "на ходу" без внесения изменений проектировщиком в схему данных. Без звукового сопровождения несколько мудрено понять, но, в общем-то, эта концепция описана в презентации, на которую я сослался выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 17:39 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
2 mazzy. На собрании клуба RSUG Евгений Нечепоренко (Вжик) делал доклад "Методология Data Vault в проектировании хранилищ данных". Эта технология имеет много общего с той, которую использовали мы в работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 17:51 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
ок. спасибо. буду читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 17:54 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
И охота Вам копья ломать ? С прошлого века видел на различных форумах и сайтах многотомные топики СК vs ЕК, время идет, а в спорах и по сей день участвуют абсолютно одинаковые аргументы (разве что развитие СУБД позволяет легче реализовывать ньюансы ЕК, по сравнению к старым версиям). Может ну его ? Кто как умеет, тот так и проектирует, у каждого свои наработки и свои особенности СУБД, плюс в одной задаче и ЕК будут глядеться неплохо, в другой без СК ничего не выйдет. Какой смысл заново начинать давно известный флуд ? От себя могу сказать, что всю жизнь пользуюсь только СК и ничего страшного не произошло. В пользу СК можно сказать, что в случае ошибки проектирования БД (ошибка постановки, ошибка архитектора и т.д.) с ним можно выкрутиться меньшими потерями, чем ЕК. Это мое мнение, вполне возможно специалисты, знающие как "готовить" ЕК могут сказать наоборот, но доказывать друг другу по моему бесполезно, как сравнивать бокс и футбол, разные принципы, разные подходы, разные методологии, куча литературы и выложенных решений для обоих моделей. P.S. Ну а Россия я думаю упомянута не зря - например, у меня из сложившегося опыта первый принцип проектирования БД "ТЗ доверяй, но в меру перестраховывайся". С ЕК такой принцип для меня не подходит, так как у меня например, есть изменяющиеся во времени справочники, где измениться может абсолютно любое поле, история изменений должна храниться полностью, так как по этой информации идут расчеты задними числами и печать отчетов. И как на такую информацию сослаться в других таблицах по ЕК лично я даже представления не имею. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 19:09 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
> И охота Вам копья ломать ? Честно говоря, неохота. Я же говорил, что поднявший такую тему достоин участи Джордано Бруно... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 19:34 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
не буду больше. читаю... мдя... уж... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 20:18 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
GaryaПо моим подсчетам форма счета-фактуры изменялась на протяжении одного года 5 раз. И это было в РоссииРанее, я уже провел мысль о том, что «все – есть перемены». Вы эту мысль старательно подтвердили. Зачем? Или Вы считаете, что перемены происходят только в России? GaryaИмеется движение, связанное с этими записями. И это движение ссылается на разные записиЧто ж, давайте по порядку. По всей видимости, рассматривается «движение» по банковским счетам. Для начала должен заметить, что любая организация может иметь произвольно много счетов в одном или разных банках. Сами процедуры открытия или закрытия счетов не являются чем-то из ряда вон выходящим. Следовательно, вести параллельно несколько счетов в финансовой системе должно быть обычным делом, в не зависимости от того, является ли какой-то счет «старым», а какой-то «новым». Добавив новое поле, можно установить логическую связь между «старым» и новым «счетом». При этом сумма со «старого» счета переводится на «новый» счет, и старый счет помечается, как неиспользуемый с такой-то даты. Аналогичная ситуация возможна во многих других ситуациях, например, при инвентаризации. Какое же отношение к этой ситуации имеет тип ключа? GaryaА я не знал А теперь увольте этого сотрудника и через пару месяцев снова примите обратно на работу под новым табельным номером (только не говорите, что отдел кадров где-то принимаемому на работу сотруднику присваивает прежний табельный номер)Хм... Скажите, а Ваши инспектора отдела кадров хорошо знакомы с правилами приема на работу? Смею думать, что нет. Дело в том, что информация о каждом сотруднике должна хранится на предприятии 75 лет. Следовательно, сотрудник должен однозначно идентифицироваться в течение всего этого времени. Именно для этого ему присваивается табельный номер. И при повторном приеме на работу инспектор отдела кадров обязан повторно присвоить сотруднику старый табельный номер. GaryaА после объясните фискальщикам, почему НДФЛ нарастающим итогом по одному и тому же человеку некорректно рассчитался...[ /quot]Вот пусть несколько раз взыщут НДФЛ с нерадивого инспектора ОК, и все встанет на свои места. Видите, как полезны ЕК... [qout=Garya]Ну есть сущность "организация". Вне зависимости от существования или НЕ существования ИНН, КПП, кодов ВЭД, ОКПО, ОКОНХ и многих других. Если наши законодатели придумают новый 20-значный или 200-значный код, в котором объединят все эти коды, то что изменится в предметной области, кроме того, что для данной сущности появился новый атрибут, которого раньше не было? Какие кардинальные изменения произошли в отношениях между сущностями?И что же из этого следует? Только то, что не все сущности предметной области имеют естественный ключ? Да, конечно. Но почему надо применять суррогатный ключ, там, где есть естественный. Или может быть из-за отсутствия ЕК в одной сущности, не следует исследовать остальные (а, значит, и не исследовать предметную область)? GaryaА не могли бы Вы указать конкретные координаты долготы и широты объекта "Москва"? Интересно, сколько времени Вы будете искать ответ на этот вопрос. И еще интереснее, что любые координаты - это положение ТОЧКИ. А Москва - это далеко не точка (это я и пытался объяснить). Из одного конца в другой можно ехать аж полдня. И если два юзера укажут координаты двух РАЗНЫХ точек, которые хоть и находятся в пределах Москвы, но образуют РАЗНЫЕ значения первичного ключаДля начала, давайте научимся не сваливать все в одну кучу. Подобный подход – «смертный» приговор для проектировщика или... для его пользователей. Итак, первое. Вы, как я понял, не отрицаете, что широта и долгота однозначно идентифицируют положение любого предмета на поверхности Земли. Второе, в каждом городе есть общепринятая точка, относительно которой считаются все относительные расстояния. Как правило, это точка возле центрального почтамта или прямо в нем. Поэтому выдумывать эту точку тоже не надо, достаточно ее знать. И, наконец, третье. Если понятия широты и долготы не входят в предметную область, то, скорее всего, что для них есть адекватная замена, например, административные или почтовые коды, принятые аббревиатуры и пр. GaryaВообще-то, если в первичный ключ включить вообще все поля вообще всех таблиц, то можно считать, что они уже автоматом нормализованыНу, вот... очередные «откровения», то ЕК нормализацию нарушает, то предлагают в ЕК все атрибуты включить... Хотелось бы заметить, что проектировщик БД не создает предметную область, но моделирует ее. И чем адекватнее модель своему оригиналу, тем она качественнее. Ферштейн? Исходя из сказанного, замечу, что вопрос о том включать или не включать атрибуты в ключ не может быть решен произвольным образом (дорого платить придется за подобное «решение»). Необходимо исследовать атрибуты каждой сущности и зависимости между сущностями, прежде чем принимать решение о том, каким будет ключ. GaryaТеоретически это так, и спорить я тут не стану. Вопрос только в том, кому нужна такая нормализация. Нормализируют таблицы обычно с определенными целями, которых в данном случае я не наблюдаюНормализация всегда выполняется с одной единственной целью: избежать аномалий. Что значит «такая» и «не такая» нормализации для меня осталось загадкой... GaryaКроме теории есть еще практика...Если теория противоречит практике, то возможно одно из трех: 1. Неверна теория; 2. Неверно истолкована практика (ошибка в измерениях, например); 3. Практик просто не знает теории. Выбирайте то, что Вам ближе. GaryaЕсли мы, например, не хотим допустить появления в БД двух городов с одинаковым именем, то для этого совсем не обязательно имя города превращать в первичный ключ. Это можно сделать множеством иных способов. Совершенно верно. Сказанное означает только то, что название города должно быть признано ключем-кандидатом. GaryaНеужели ваши пользователи никогда не делают опечаток?Почему же, наверное, делают. Но из этого никоим образом не следует то, что я использую в качестве ключа набор атрибутов не обеспечивающий уникальности. Уважаемый Garya, постарайтесь понять меня правильно. Ваши реплики свидетельствуют о том, что Вы - недостаточно хорошо знаете теорию баз данных; - поверхностно изучаете предметную область и, как следствие, делаете поспешные выводы о сущностях предметной области и их атрибутике; - недостаточно глубоко просчитываете результаты своих решений. Думаю, что обсуждать проблему выбора ключей дальше, не имеет смысла, поскольку мы говорим не о ключах, а о «белых пятнах» в Вашем сознании. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 20:26 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
ASUне отрицаете, что широта и долгота однозначно идентифицируют положение любого предмета на поверхности Земли Нет, они могут меняться, хотя бы вследствие движения литосферных плит. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 20:42 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
ASUЧто ж, давайте по порядку. По всей видимости, рассматривается «движение» по банковским счетам. Для начала должен заметить, что любая организация может иметь произвольно много счетов в одном или разных банках. Сами процедуры открытия или закрытия счетов не являются чем-то из ряда вон выходящим. Да, этот пример немного не из той оперы. Под него подходят ЕК. Я же имел в виду немного другую ситуацию. Реально наш банк сменил наименование (а еще он менял корсчет и БИК, но это было позже). Или другой случай. Под оборотами подразумевается движение дебиторской/кредиторской задолженности, а под сменившимися атрибутами - наименование одного из контрагентов (или ИНН, поскольку ДРУГАЯ организация стала правопреемником старой, но с точки зрения взаиморасчетов для нас это одна и та же организация). Необходимо, чтобы система "помнила" и старое наименование, и новое. И чтобы обороты, связанные с организациями с РАЗНЫМИ наименованиями воспринимала как взаиморасчеты с одним и тем же контрагентом, а не с разными. А в документах распечатывалось то наименование, которое было действительно на момент выписки документа. В 1С такие реквизиты называются "периодическими". И там, в принципе, эта задача решается, если проектировщик заведомо догадался все реквизиты, которые могут измениться, сделать периодическими. В той разработке, над которой работал я, периодическим были вообще все атрибуты вообще всех сущностей. Поэтому не нужно было напрягаться и соображать, что делать периодчиеским, а что не делать. ASUДумаю, что обсуждать проблему выбора ключей дальше, не имеет смысла, поскольку мы говорим не о ключах, а о «белых пятнах» в Вашем сознании. Возможно :). Я тоже думаю, что обсуждать дальше эту тему нет смысла... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 22:30 |
|
Суррогатные или естественные ключи в ERP-системах
|
|||
---|---|---|---|
#18+
ASUХм... Скажите, а Ваши инспектора отдела кадров хорошо знакомы с правилами приема на работу? Смею думать, что нет. Дело в том, что информация о каждом сотруднике должна хранится на предприятии 75 лет. Следовательно, сотрудник должен однозначно идентифицироваться в течение всего этого времени. Именно для этого ему присваивается табельный номер. И при повторном приеме на работу инспектор отдела кадров обязан повторно присвоить сотруднику старый табельный номер. Гм, как должно быть и как есть - это абсолютно разные вещи. Вы высказываетесь как должно быть, но пишем то мы программы по тому, что есть. И например, цитированная фраза противоречит тому, что есть в России. Я, как разработчик зп могу очень много страниц исписать того, что написано в ТК и НК РФ и как на самом деле работает у клиентов. И никто не вправе им навязать делать так, как "завещало" государство, они клиенты и это их личное дело, любой тиражный продукт должен поддерживать обе модели работы "Как должно быть" и "Как есть". Если он не будет соотвествовать этому условию, то он просто не будет востребован. Насчет табельных номеров у меня вопрос решен просто - в течении года табельный номер забронирован за сотрудником и в случае его увольнения он остается висеть до конца года. Если сотрудник обратно принят на работу, то ему разрешается "вернуть" его старый номер, но разрешается и сделать новый. В моей системе сотрудники вынесены в отдельную таблицу от лицевых счетов и связаны через СК, поэтому особой разницы нет, у кого какие аттрибуты были изменены во времени, сколько на сотрудника открыто лицевых счетов и нет проблем с обьединением начислений по множеству лицевых счетов сотрудника. И то - бронь табельного номера в течении года - это дань уважения ТК и обеспечение непротиворечивости годовых отчетов. Если найдется клиент, которому это не понравится, мне недолго будет это вынести в конфигурационную настройку и включать/отключать обеспечение его уникальности (опять же благодаря СК схема БД не нарушится). P.S. Напоследок в эту тему хочу сказать, что лично я и множество коллег, которые еще много лет назад участвовали в подобных спорах, пришли к компромиссному выводу: в качестве первичного ключа использовать СК, в кач-ве уникального ЕК. Тогда первичный ключ однозначно идентифицирует запись и ни от чего не зависит, а уникальный обеспечивает целостность данных на уровне бизнес-логики и может иметь различные виды уникальности. Например в вышеприведенном мною примере уникальность табельного номера обеспечивается в течении года, однако при необходимости я всегда могу изменить ее условия на полную уникальность в пределах таблицы, в течении полгода и т.д. Все это прекрасно реализуется через UNIQUE CONSTRAINTS или же обычные триггера. По моему прекрасный выход, без лишних напрягов СУБД и риска нарваться на неприятные ситуации с ЕК. Еще P.S. Кстати в предыдущих "баталиях" основным аргументом использования ЕК была репликация. Сейчас смотрю этот аргумент в связи с прогрессом механизмов репликаций у всех СУБД не упомянается как главный. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2004, 22:46 |
|
|
start [/forum/topic.php?fid=29&fpage=77&tid=1528736]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 163ms |
0 / 0 |