|
|
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
> Это зависит от назначения разрабатываемой системы Дружище, сделайте одолжение: тупите в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 12:47 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Это зависит от назначения разрабатываемой системы Дружище, сделайте одолжение: тупите в другом месте. Cделайте одолжение: хамите в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:36 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
miksoftЕще один момент, который нужно учесть - возможность существования в системе "виртуальных" объектов. Например, когда я оплачивал что-то на каком-то сайте со счета мобильного телефона, в статусе заказа мне написали "Поступила оплата 400 Mts", хотя на самом деле это обычные рубли с клиентского счета МТС. Справочники -> Валюта Создать новую валюту Код: MTC :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:43 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
Олег ГапонmiksoftЕще один момент, который нужно учесть - возможность существования в системе "виртуальных" объектов. Например, когда я оплачивал что-то на каком-то сайте со счета мобильного телефона, в статусе заказа мне написали "Поступила оплата 400 Mts", хотя на самом деле это обычные рубли с клиентского счета МТС.Справочники -> Валюта Создать новую валюту Код: MTC :)Если не делать первичным ключом ISO-коды, то да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:46 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
alexeyvgБредятинаУ экземпляра любого объекта должен быть идентификатор, принципиально не являющийся характеристикой объекта. Он отражает просто факт существования экземпляра независимо от значений его характеристик (Вы существуете независимо от того, как Вас зовут, или какой у Вас ИНН). "Должен быть" - это не очень весомый аргумент. А его отсутствие в РМД - это, конечно, весомый факт:) Непробиваемая позиция, конечно, когда никаких аргументов вообще нет. alexeyvgСуществуете вы совершенно независимо от наличия какого либо идентификатора, И в БД факт существования отражается идентификатором. Вы просто не в курсе. Здесь уже было несколько обсуждений на эту тему. alexeyvg а вот про то, что этот факт не отражает совокупность ваших харастеристик, можно и поспорить. Поспорьте:) Я спорить не буду. Я лучше соглашуть, что поскольку Вы alexeyg, значит Вы существуете:) alexeyvgПричём отражает независимо от того, учитывает их кто-то в какой-то системе или нет. Я угадал. Спорить не о чем:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:48 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
miksoftОлег Гапонпропущено... Справочники -> Валюта Создать новую валюту Код: MTC :)Если не делать первичным ключом ISO-коды, то да. А если делать первичным ключом ISO-код, то можно предоставить пользователю этот код ввести для новых записей, или это кто то запрещает ? Для существующих записей блокировать изменение ISO-кода (первичного ключа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:54 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
> Справочники -> Валюта > Создать новую валюту > Код: MTC Это не валюта, а условная расчетная единица. Разница в том, что эмиссией валют занимается центробанк или функционально близкая структура (в Штатах, например, ФРС; аналогичные функции могут быть у межгосударственных структур (например, МВФ)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:56 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
Олег ГапонА если делать первичным ключом ISO-код, то можно предоставить пользователю этот код ввести для новых записей, или это кто то запрещает ? И ещё сделать флажок "это действительно ISO код или таки левый", чтобы включить его вторым полем и не напороться на введение новой страны MTS. Или не, лучше придумать правило "левые коды обязательно содержат пробел в середине" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 13:56 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
softwarerОлег ГапонА если делать первичным ключом ISO-код, то можно предоставить пользователю этот код ввести для новых записей, или это кто то запрещает ? И ещё сделать флажок "это действительно ISO код или таки левый", чтобы включить его вторым полем и не напороться на введение новой страны MTS. Или не, лучше придумать правило "левые коды обязательно содержат пробел в середине" Честно говоря, не вижу в такой ситуации проблем с трёхбуквенным ключём по сравнению с целочисленным. При использовании суррогатного целого ключа, видимо, запись с левым кодом тоже должна по вашей методике помечаться пробелом где-нибуть? Олег ГапонА если делать первичным ключом ISO-код, то можно предоставить пользователю этот код ввести для новых записей, или это кто то запрещает ? В принципе можно, но не нужно делать естественные ключи из того, что ими не является. Коды стран можно, коды валют тоже, а вот если пришла транзакция с кодом валюты МТС, то наверное правильно выяснить, какая эта валюта, и найти для неё ПК. Собственно, как и в случае суррогатных ключей. Не вижу никакой разницы Если ключи валюты 1, 2, 3, 4, 5... , а приходит валюта "МТС" или "Вася", то что с ней делать? Олег ГапонДля существующих записей блокировать изменение ISO-кода (первичного ключа)Да в общем то для любых записей это надо блокировать. Если этот код может меняться, то его, конечно, нельзя делать ПК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 17:27 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
alexeyvgПри использовании суррогатного целого ключа, видимо, запись с левым кодом тоже должна по вашей методике помечаться пробелом где-нибуть? Да нет. Суррогатному ключу наплевать, "исошная" эта запись или "левая". Просто будет null в code, если исошный код где-то нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 17:38 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
softwareralexeyvgПри использовании суррогатного целого ключа, видимо, запись с левым кодом тоже должна по вашей методике помечаться пробелом где-нибуть? Да нет. Суррогатному ключу наплевать, "исошная" эта запись или "левая". Просто будет null в code, если исошный код где-то нужен.null в code не будет, ведь он есть у валюты. Разве что намеренно для валюты с известным исошным кодом записать в поле кода нулл. Или нужно при поступлении денег c кодом МТС создавать для каждой записи новую валюту с null в поле исошного кода? (ведь МТС - не идентификатор валюты, и у каждой записи может быть валюта любая, как существующая, так и виртуальная) В общем, какая то странная постановка задачи, так не бывает. Я не призываю выискивать для каждого случая хоть какой-то естественный ключ, сам обычно использую суррогатные, но часто бывают действительно нормальные кандидаты на естественный ключ, такие как штат США или код страны; почему бы их не использовать? Не верится всё таки, что вот какой-нибуть штат США вдруг поменяет код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 18:43 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
alexeyvgnull в code не будет, ведь он есть у валюты. Серьёзно? И какой же именно iso-шный код у валюты "МТС"? :) alexeyvg(ведь МТС - не идентификатор валюты, По сказанному это вроде как виртуальная валюта. То есть, я так крепко подозреваю, что "400 Mts" всегда равно "400 Mts" и почти наверняка имеют стабильный коэффициент пересчёта в одну из "настоящих" валют. Но вот кода ISO у неё нет и вряд ли будет. alexeyvgно часто бывают действительно нормальные кандидаты на естественный ключ, такие как штат США или код страны; почему бы их не использовать? Потому, что этот подход не влечёт сколько-нибудь заметных преимуществ, но "почти всегда работает". alexeyvgНе верится всё таки, что вот какой-нибуть штат США вдруг поменяет код. Например, штат Техас согласно союзному договору имеет право разделиться на пять независимых штатов в составе США. Какой из них сохранит код, если сохранит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 19:05 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
softwareralexeyvgnull в code не будет, ведь он есть у валюты. Серьёзно? И какой же именно iso-шный код у валюты "МТС"? :) По сказанному это вроде как виртуальная валюта. То есть, я так крепко подозреваю, что "400 Mts" всегда равно "400 Mts" и почти наверняка имеют стабильный коэффициент пересчёта в одну из "настоящих" валют. Но вот кода ISO у неё нет и вряд ли будет. miksoftэто обычные рубли с клиентского счета МТС.В данном случае это рубли. И нужно указать валюту операции "рубли" Если нужно заводить милионы виртуальных валют в справочник валют, то наверное суррогатный ключ лучьше. Но ведь не всегда так бывает, не всегда такая задача, работать с виртуальными валютами. softwareralexeyvgно часто бывают действительно нормальные кандидаты на естественный ключ, такие как штат США или код страны; почему бы их не использовать? Потому, что этот подход не влечёт сколько-нибудь заметных преимуществ, но "почти всегда работает".Больших не влечёт. Так я и говорил автору - нужно поговорить с коллегами, узнать, почему они настаивают на таком решении, какие преимущества будут конкретно для их системы. Собственно, "почти всегда работает" и небольшие преимущества - это достаточно для использования такого решения. Ведь перейти на суррогатные ключи не просто, а очень просто - нужно только добавить поле кода. А вот перейти наоборот довольно трудоёмко. softwareralexeyvgНе верится всё таки, что вот какой-нибуть штат США вдруг поменяет код. Например, штат Техас согласно союзному договору имеет право разделиться на пять независимых штатов в составе США. Какой из них сохранит код, если сохранит?Какой-то сохранит, остальные нет. Какая разница в данном случае с суррогатными ключами? При этом, заметьте, эта проблема при разделении штата Техас будет обязательно решена вне вашей системы. Потому что код 'TX' - это естественный ключ, и он используется именно как идентификатор штата везде, например, в документах, правах, на письмах и т.д. Поэтому при разделении будут обязательно установлены правила, которым собственно и будет следовать система в том числе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2010, 20:20 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
alexeyvgВ данном случае это рубли. И нужно указать валюту операции "рубли" Вы хотите сказать, что в другом случае под словами "400 Mts" будут подразумеваться тугрики? В принципе может быть для клиентов с валютными тарифами, если такие есть. Но неизвестно. alexeyvgНо ведь не всегда так бывает, не всегда такая задача, работать с виртуальными валютами. Не всегда. Но подобные "непредусмотренные" задачи возникают достаточно часто для того, чтобы не осложнять себе их решение. Вон, когда мы работали с Белоруссией, пришлось заводить в систему валюту "тысячи зайчиков" - какой у неё код? :) alexeyvgТак я и говорил автору - нужно поговорить с коллегами, узнать, почему они настаивают на таком решении, какие преимущества будут конкретно для их системы. Это универсально верная рекомендация, конечно. Но в общем заранее можно сказать "никаких". alexeyvgСобственно, "почти всегда работает" и небольшие преимущества - это достаточно для использования такого решения. "Почти всегда работает" - это достаточное основание для того, чтобы никогда не использовать решение вне зависимости от преимуществ. Потому что допустимые решения должны работать "всегда". alexeyvgВедь перейти на суррогатные ключи не просто, а очень просто - нужно только добавить поле кода. А вот перейти наоборот довольно трудоёмко. Любопытное замечание. Давайте тогда в свете оного Вы объясните, нафига заранее закладывать эту "довольно трудоёмко" в проект, строя его на естественных ключах. alexeyvgsoftwarerНапример, штат Техас согласно союзному договору имеет право разделиться на пять независимых штатов в составе США. Какой из них сохранит код, если сохранит?Какой-то сохранит, остальные нет. Может быть. А может, ни один не сохранит. А может, ради них введут трёхсимвольные коды, какие-нибудь TXW, TXN итп. alexeyvgКакая разница в данном случае с суррогатными ключами? Ну что ж, давайте посмотрим разницу на простом примере. Допустим, мы делаем ИС "Губернаторы американских штатов", простейшая информация - кто когда где рулил. Справочник "люди", справочник "штаты", развязка многие ко многим между ними. Давайте теперь у нас с 09.05.2011 штат Техас разделится на Хьюстон (HS), Остин (AU) и Глухомань (TX). Как это изменение будет сделано при использовании суррогатных ключей: 1) Губернатору Техаса проставим срок завершения полномочий 08.05.2011 2) Записи "Техас" проставим "дата окончания = 09.05.2011" 3) Введём записи HS, AU и TX 4) Дождёмся выборов в новых штатах и введём их губернаторов Как это будет сделано при использовании естественного ключа - кода штата? Желательно так, чтобы Джон Кеннеди не оказался убитым на территории штата Глухомань? alexeyvgПри этом, заметьте, эта проблема при разделении штата Техас будет обязательно решена вне вашей системы. Да наплевать мне на "вне системы", мне важно, чтобы она была просто и корректно решена внутри системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2010, 10:57 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
softwareralexeyvgВ данном случае это рубли. И нужно указать валюту операции "рубли" Вы хотите сказать, что в другом случае под словами "400 Mts" будут подразумеваться тугрики? В принципе может быть для клиентов с валютными тарифами, если такие есть. Но неизвестно.Я хочу сказать, что т.к. Mts это не код валюты, то для каждой транзакции потенциально подразумевается своя валюта, неизвестная. В первой строке с кодом Mts имеются в виду тугрики, во второй ангилйские фунты и т.д. Т.е. в транзакциях для всех кодов валют, которых нет, можно спокойно заменять этот код на *** - результат будет такой-же. Если вы действительно не знаете, какая это валюта на самом деле. Но это абсурдый путь, так никто не будет делать. В реальности обязательно выяснят (позвонят, напишут, спросят и т.д.) у поставщика данных (откуда пришли транзакции) и узнают, что этот поставщик под кодом Mts имел в виду российские рубли. И сопоставят ему валюту RUB. Или валюту 12345, если вы используете суррогатный ключ - алгоритм совершенно одинаковый. softwareralexeyvgНо ведь не всегда так бывает, не всегда такая задача, работать с виртуальными валютами. Не всегда. Но подобные "непредусмотренные" задачи возникают достаточно часто для того, чтобы не осложнять себе их решение. Вон, когда мы работали с Белоруссией, пришлось заводить в систему валюту "тысячи зайчиков" - какой у неё код? :)Я хочу сказать, что обычно заводить "левые", виртуальные единицы неправильно, вместо этого можно найти правильные решения. Не знаю, зачем такая валюта, "тысячи зайчиков"... У беллорусии есть 2 валюты - BYB и BYR, зайчики и рубли. Зачем заводить ещё 10 валют - зайчик, 10 зайчиков, 100 зайчиков...... - непонятно. Тот же вариант (приводили выше) ситуации с RUR и RUB. Ведь тоже нету тут никакой проблемы - это просто разные валюты, их нужно по разному учитывать и считать. softwareralexeyvgСобственно, "почти всегда работает" и небольшие преимущества - это достаточно для использования такого решения. "Почти всегда работает" - это достаточное основание для того, чтобы никогда не использовать решение вне зависимости от преимуществ. Потому что допустимые решения должны работать "всегда".Критерий правильности решения - это не его идеальность и применимость к любым задачам и бизнес-процессам, которые не планируется решать, но которые в принципе могут решаться. Нужен какой-то компромисс, и вот я выбираю решение поставленной задачи + возможность несложного расширения в будущем. softwareralexeyvgВедь перейти на суррогатные ключи не просто, а очень просто - нужно только добавить поле кода. А вот перейти наоборот довольно трудоёмко. Любопытное замечание. Давайте тогда в свете оного Вы объясните, нафига заранее закладывать эту "довольно трудоёмко" в проект, строя его на естественных ключах.Нет, как раз "довольно трудоёмко" - это на суррогатных ключах. Я же говорю - для перехода на суррогатные ключи нужно просто добавить поле в таблицу. А вот обратно - "довольно трудоёмко" - нужно менять кучу связанных данных. Поэтому если в ближайшей перспективе, для озвученных и предполагаемых процессов естественный ключ подойдёт, то можно его и сделать, а если через 20 лет понадобится суррогатный - его ввести проще простого, соверешнно не "трудоёмко". softwarerНу что ж, давайте посмотрим разницу на простом примере. Допустим, мы делаем ИС "Губернаторы американских штатов", простейшая информация - кто когда где рулил. Справочник "люди", справочник "штаты", развязка многие ко многим между ними. Давайте теперь у нас с 09.05.2011 штат Техас разделится на Хьюстон (HS), Остин (AU) и Глухомань (TX). Как это изменение будет сделано при использовании суррогатных ключей: 1) Губернатору Техаса проставим срок завершения полномочий 08.05.2011 2) Записи "Техас" проставим "дата окончания = 09.05.2011" 3) Введём записи HS, AU и TX 4) Дождёмся выборов в новых штатах и введём их губернаторов Как это будет сделано при использовании естественного ключа - кода штата? Желательно так, чтобы Джон Кеннеди не оказался убитым на территории штата Глухомань? alexeyvgПри этом, заметьте, эта проблема при разделении штата Техас будет обязательно решена вне вашей системы. Да наплевать мне на "вне системы", мне важно, чтобы она была просто и корректно решена внутри системы. Понимаете, "вне системы" - это здесь ключевой момент; тем и хороши естественные ключи, что проблему будет решать кто-то другой :-) Т.е. с 09.05.2011 штат Техас разделится на Хьюстон (HS), Остин (AU) и Глухомань (GU). Потому что TX - это ПК штата Техас, которого больше не будет, и этим кодом не будут отмечать новую административную единицу. Просто потому, что получая данные из других систем, вы будете получать код штата, и только по этому коду будете приписывать данные к штату, у вас просто не будет других вариантов. Хоть обзаводитесь кучей записей с разными суррогатными ключами и одинаковым кодом - вы не поймёте, к какой записи относится пришедшая транзакция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2010, 12:10 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
alexeyvgКакой-то сохранит, остальные нет. Обозначим эту фразу как (1) alexeyvgsoftwarerДавайте теперь у нас с 09.05.2011 штат Техас разделится на Хьюстон (HS), Остин (AU) и Глухомань (TX). Как это изменение будет сделано при использовании суррогатных ключей: Т.е. с 09.05.2011 штат Техас разделится на Хьюстон (HS), Остин (AU) и Глухомань (GU). Не-не-не, Дэвид Блейн, не-не-не (ц). Не надо подтасовок, давайте Вы покажете простое решение простой задачи в соответствии с Вашей же фразой (1) о том, что один из новых штатов сохранит код старого. alexeyvgПотому что TX - это ПК штата Техас, которого больше не будет, Старого штата Техас - самого большого в США, со столицей в Остине и ракетным центром в Хьюстоне - действительно больше не будет. Будет некий новый штат, техасская глухомань, с ковбоями верхом на коровах и кодом TX. alexeyvgи этим кодом не будут отмечать новую административную единицу. Я бы с интересом посмотрел как Вы со слезами на глазах объясняете начальству "Они сволочи, их надо мочить в сортирах, они не должны были так поступать, потому что это решительно противоречит логике, заложенной в нашу программу на естественных ключах". Содержательное обсуждение, как мне кажется, на этом можно и прекратить. Вы попросили пример, получили его и демонстрируете явную неспособность продемонстрировать приемлемое решение, выдавая вместо него кучу.. рассуждений. alexeyvgНе знаю, зачем такая валюта, "тысячи зайчиков"... При адаптации российской системы в Белоруссии для финансовых расчётов в "единицах зайчиков" не хватало разрядной сетки, начинались переполнения и потери точности. Стоимость проекта не стимулировала к глобальному учёту столь уникальной ситуации как валюта в тысячные доли копеек (кажется на тот момент), поэтому решили считать в "тысячах зайчиков". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2010, 12:41 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
softwareralexeyvgКакой-то сохранит, остальные нет. Обозначим эту фразу как (1) alexeyvgТ.е. с 09.05.2011 штат Техас разделится на Хьюстон (HS), Остин (AU) и Глухомань (GU). Не-не-не, Дэвид Блейн, не-не-не (ц). Не надо подтасовок, давайте Вы покажете простое решение простой задачи в соответствии с Вашей же фразой (1) о том, что один из новых штатов сохранит код старого.1. Если будет как во фразе 1, то будет разъяснение считать Глухомань правоприёмницей Техаса, и да, Джон Кеннеди убит в Глухомани. 2. Если нужно различать, то, как я говорил, сделать ключ суррогатным - это просто добавить поле. Никаких данных при этом обновлять не надо, никакого кода править не надо (ну, почти не надо). 3. Давайте всё таки исходить из здравого смысла. Вы же не делаете поля с ценой текстовыми размером до 2-х гигабайт? А то придёт начальник, скажет - цену будем теперь записывать стихами в виде намёков, а вы, О Боже!авторсо слезами на глазах объясняете начальству "Они сволочи, их надо мочить в сортирах, они не должны были так поступать, потому что это решительно противоречит логике, заложенной в нашу программу на ценах в DECIMAL". softwareralexeyvgНе знаю, зачем такая валюта, "тысячи зайчиков"... При адаптации российской системы в Белоруссии для финансовых расчётов в "единицах зайчиков" не хватало разрядной сетки, начинались переполнения и потери точности. Стоимость проекта не стимулировала к глобальному учёту столь уникальной ситуации как валюта в тысячные доли копеек (кажется на тот момент), поэтому решили считать в "тысячах зайчиков".Ну, хорошо, что ошибка проектирования компенсировалась другой ошибкой проектирования :-) Надо-же, курс валют выражать в десятичной дроби :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2010, 15:17 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
alexeyvgсчитать Глухомань правоприёмницей Техаса, и да, Джон Кеннеди убит в Глухомани. А Советский Союз выиграл Куликовскую битву. Да-да, вот к чему приводят естественные ключи :) alexeyvgДавайте всё таки исходить из здравого смысла. Давайте. Согласно моему здравому смыслу, сразу использовать прямое и работающее решение - гораздо лучше, нежели внедрять кривое, а потом, когда перестанет работать, заменять на правильное. alexeyvgА то придёт начальник, скажет Ну и пусть приходит. Это не естественные ключи, требование без проблем реализуемо в рамках выбранной архитектуры. alexeyvgНадо-же, курс валют выражать в десятичной дроби :-) А при чём тут курс валют? Кстати, айтишнику не комильфо путать десятичную систему с двоичной. Кстати, Техас - это исконно мексиканская территория. Так что если уж он убит в Глухомани.... (поворачиваясь к мексиканцам и медленно свирипея).... ОНИ УБИЛИ КЕННИДИ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2010, 15:51 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо. После долгих дебатов переход на первичные ключи в виде ISO кодов в таблицах типа Страны, Языки, Валюты был отменён. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2011, 13:19 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
Вдогонку Рекомендации в доке по Hibernate Глава 19.Лучшие Практики Использования .... Мы рекомендуем, чтобы идентификаторы были 'синтетическими' (synthetic), т.е. не несущими никакой смысловой нагрузки для бизнеса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2011, 13:38 |
|
||
|
Первичные ключи и ISO коды
|
|||
|---|---|---|---|
|
#18+
sptzтолько примари кей в первой таблице надо (datatime, sensor_id) ShtockНу для примари-кей я бы сделал просто id, а на datatime, sensor_id сделал бы Unique index Абсолютно верное замечание! Если в качестве праймери ки использовать поля, имеющие какое-то ещё начение кроме тупой нумерации записей, это чревато неприятностями: http://www.zuskin.com/coding_habits__db.htm#Only_surrogate_pk] Только суррогатные первичные ключи! Модератор: При создании таблиц баз данных никогда не используйте в качестве первичных ключей поля, имеющие реальные значения в жизни! Даже если вы уверены, что значения уникальны и обязательны в бизнесе! Такие ключи называются «естественными ключами» («natural keys»). ВСЕ ПЕРВИЧНЫЕ КЛЮЧИ ДОЛЖНЫ БЫТЬ СЧЕТЧИКАМИ (1, 2, 3 и т.д.) И НЕ ИМЕТЬ ДРУГОГО КОНТЕКСТА КРОМЕ ИДЕНТИФИКАЦИИ ЗАПИСЕЙ! Такие ключи называются «суррогатными (синтетическими) ключами» («surrogate, synthetic keys»). Например, вы создаете информационную систему для компании, в которой у каждого сотрудника уже есть идентификационный номер. Не применяйте этот номер в качестве первичного ключа для таблицы ‘employees’! Вместо этого создайте другой, скажем, emp_id. Кроме этого, можно создать поле для хранения существующих идентификаторов сотрудников и привязать к ним ограничения NOT NULL и UNIQUE (то же самое для других «реальных» полей, скажем, Social Insurance Number). Почему бы и нет? Теория баз данных называет такие поля «ключами-кандидатами»: они подобны кандидатам на выбор в качестве первичных ключей, но не позволяйте им выиграть выборы! Многие архитекторы баз данных не осознают трудностей, возникающих у разработчиков при использовании естественных ключей! Маленькая проблема: когда в качестве первичного ключа в таблице присутствует комбинация из множественных полей (я видел 5-8!!!), разработчики вынуждены: * Для идентификации записи объявлять и передавать между объектами несколько переменных и даже целые структуры/классы, хотя ОДНОЙ ПРОСТОЙ ПЕРЕМЕННОЙ вполне достаточно для выполнения этой работы. * Создавать SELECTы с раздутыми кошмарными WHERE-конструкциями с нагромождением лишних строк, написанных только ради соединения двух таблиц. Важные бизнес-условия могут просто затеряться в такой неразберихе! Но также есть большая проблема, возникающая при необходимости изменить информационную систему из-за изменений в бизнес-требованиях. Представьте: однажды заказчик прекращает заниматься идентификационными именами сотрудников. Другой пример: дубликаты номеров ID-карт, обнаруженные по крайней мере в одной стране, насколько я знаю. Вы будете изменять функциональность (отношения между таблицами, а также объекты баз данных и GUI-приложения), затрачивая время на повторную сборку и тестирование системы. Но если вы применили суррогатные первичные ключи, вам не потребуется выполнять «черную» работу: все хорошо, потому что смысл первичных ключей не изменился. Вчера это был простой счетчик, и он останется таким спустя годы при любых изменениях в бизнес-логике! Я удивляюсь, почему на форумах разработчиков ведутся дискуссии о том, какие первичные ключи применять: естественные или суррогатные. Нам всегда следует думать о наихудшем случае, и выше я описал, что может случиться с естественными ключами – головная боль и высокая вероятность багов. А что случится в самом худшем случае при использовании суррогатных ключей? В таблице будет одно дополнительное поле. Это не страшно – у нас нет цели сэкономить дисковое пространство: в наши дни мы можем оставить в ресторане сумму, превышающую стоимость жесткого диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 20:26 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37013401&tid=1542086]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
141ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 428ms |

| 0 / 0 |
