|
|
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
SuperNick Все, что касается таблиц последующих уровней, то они раскрыты более подробно, по ним пытался задавать вопросы, учту Ваши советы по поводу различных вариантов реализации системы отношений, после доопределения задачи по некоторым параметрам и ограничениям. Спасибо. Все же универсального решения здесь, наверное, не может быть дано - мало информации. И это уже отмечалось. Но как вариант могу предложить следующее. Если ПК таблицы с характеристиками объекта будет выступать внешним ключом для других таблиц, и эти таблицы будут иметь большое количество записей - (например оперативная информация) - стоит рассмореть использование простого суррогатного ключа. Если же таблица характеристик представляет атрибуты объекта и используется только "из объекта" - такой необходимости нет, можно использовать составной ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2007, 22:06 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
guest_20040621Азы РМД, дружище ChA, никак не связаны с Вашей интерпретацией этих азов. Написанное Вами про составные ключи - чушь.Да, да, я в курсе. Право, не стоило беспокоиться. Когда захотите сказать нечто более существенное, с удовольствием почитаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 08:46 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
apapacyЕсли документ "проводится/перепроводится/отменяется" и имеется на него ссылка в регистре/регистрах с привязкой по строкам документа. Как Вы посоветуете поступать? Хранить в регисте ссылку на (№документа, №строки) или вводить суррогат?Об этом уже неоднократно было сказано выше. Хотите проще, добавляете для строки суррогатный ключ и ссылаетесь на нее, не хотите - используете составной ключ, который может принести некоторые дивиденды. Хотя я, скорее, пересмотрел бы модель, неидентифицирующие ссылки на зависимые объекты меня обычно настораживают. Возможно есть более приемлимое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 09:16 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
> сказать нечто более существенное Если Вы в курсе, то должны быть и в курсе тарифов. Уверены, что можете себе это позволить? А чушь писать в любом случае не стоит. Независимо от того, в курсе Вы или нет. Человек с нормальной подготовкой посмеется. А какой-нибудь студент может поверить. И станет одним потенциальным тупым одинцеконфигурастом больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 10:10 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ChA Сергей ВаскецовНе очень понимаю, что значит выделенное. Давайте на примере попроще. Как по-Вашему, в составе документа в БД могут быть идентичные строки (с одной ценой, номенклатурой и т.п.), как их тогда различать? Предложите свой вариант PK для строки состава документа, обсудим, в частности, как ссылаться на такие строки. Уж куда проще-то ? Проще были бы DDL-ки табличек заголовка, состава и, например, налогов по строке состава, которые ссылаются на состав (если по Вашей логике налоги "захардкодены" прямо в строке состава - не беда, придумайте сами любую табличку, которая бы ссылалась на строку состава и на любой другой совершенно "левый" справочник). А мы бы рассмотрели. А то все такие теоретики, аж жуть. ChAЕсли честно, то мне уже надоедает говорить о вполне очевидных вещах Достаточно было ответить на мой вопрос. ChAЛюбая сущность должна иметь первичный ключ, и этот ключ должен позволять однозначно определять ее как в БД, так и в "реальном" мире На кой, простите, требовать от PK идентификации объекта в реальном мире? И вообще, где это написано? ChAиначе вы не просто сможете их отождествить А Вы уверены, что оно всегда мне надо? Как пример в Вашем случае, контроль уникальности №пп я вполне могу оставить до момента утверждения документа, а не выдумывать жесткие констрейнты и затем яростно обходить их при необходимости банального копирования строки. Или просто в ситуации, когда софт установлен у большого количества заказчиков, имеющих различное представление о том, какая же все-таки комбинация полей является уникальной в составе документа. ChAа соотвественно, грош цена тем данным, которые непонятно какую сущность описывают Кому непонятно? ChAТ.е., "естественный" ключ должен быть всегда Кто Вам сказал такую глупость? Есть множество ситуаций (некоторые я привел выше в этом же сообщении), когда никакой естественный ключ на таблице не может существовать как декларативное ограничение. ChAдругое дело, что по вполне очевидным причинам мы, как правило, делаем его альтернативным Ну, если речь о кодах справочников - вполне может быть. ChAДля зависимых сущностей этот ключ будет составным, именно потому, что они зависимые и, вообще говоря, не могут существовать вне сущности "родителя" Опаньки! То есть, в PK включаются как минимум все обязательные поля в таблице? ChAпоэтому к идентификатору сущности "родителя", добавляется идентификатор этой сущности в рамках родителя Вопрос в целесообразности такого включения, а не в том, что если к PK добавить еще и ссылку на родителя, он останется не менее уникальным, чем был PK. ChAЯ не знаю, как еще объяснить, что позиция счет-фактуры, например, сама по себе не существует, если нет счет-фактуры, ее содержащей Если ее (строки состава без заголовка) нет в реальном мире, то это не значит, что в БД не может быть связи, в которой на заголовок вообще пофигу и нет необходимости учитывать, что он должен быть. Как раз наоборот, раз есть строка состава, то и заголовок есть, так как ссылка на заголовок в составе - обязательное поле. ChAИ эта позиция обязательно чем-то отличается от других ей подобных в этом документе.В простейшем случае, это ее номер Пока документ в БД не утвержден, с ним можно делать почти что угодно, и в первом приближении не очевидно, что дял копирования строк состава необходимо уметь на лету править №пп. ChAИменно он позволяет вам качать права, если поставщик вам недопоставил товар Чего? ChAВы тыкаете поставщика носом в эту строку и говорите, вот по этой позиции мне недодали Подозреваю, в такой иллюзорной ситуации (разборки на основании счета-фактуры, а не счета или накладной) используется вовсе не №пп строки состава документа в БД, а то, что на бумажном носителе. У нас №пп хранится в строках состава и им можно управлять, хотя я вполне допускаю, что №пп может формироваться у кого-то только при печати. ChAВ некоторых случаях, это может быть код товара, например, если таковы принятые правила игры в данной фирме. Соотвественно в таком документе не может быть двух позиций содержащих один и тот же товар. Предлагаю не обсуждать целесообразность такого подхода, это всего лишь один из возможных вариантов Теоретически это возможно, практически - нет. ChAНо в любом случае, есть поле, комбинация полей, которые позволяет явно отличить одну строку от другой в данном документе, как внутри БД, так и вне ее, причем сделать взаимооднозначное соотвествие Во-первых, вообще говоря, неочевидна сама необходимость идентификации строк в БД теми методами, которые Вы предлагаете. Как минимум, потому что, во-вторых, не очевидно, что идентификация "как внутри БД, так и вне ее" должна быть одинаковой; почему бы не иметь различную идентификацию "как внутри БД, так и вне ее"? И уж совсем не понятно, зачем необходимо "взаимооднозначное соотвествие". ChAЕстественно, мы исходим из того, что позиция обычно принадлежит только одному документу, а не нескольким одновременно. Определяя для нее простой "сквозной" суррогатный ключ в общем случае вы добавляете совершенно ненужные данные не считая того, что отсутствие идентификатора документа в первичном ключе может привести к тому, что позиция может быть легко приписана другому документу, так как идентификация позиции перестает зависеть от документа. Данные в БД можно испоганить множеством способов, изменить ссылку на заголовок в составе - далеко не самый нетривиальный из них. Если система не дает такую возможность, подобная проблема становится банальнейшей административной проблемой раздачи полномочий на выполнение действий в обход системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 10:33 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ChA Любая сущность должна иметь первичный ключ, и этот ключ должен позволять однозначно определять ее как в БД, так и в "реальном" мире, иначе вы не просто сможете их отождествить, а соотвественно, грош цена тем данным, которые непонятно какую сущность описывают. Везет же людям. А мне почему-то некоторые нехорошие сущности совсем ничего должны :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 14:09 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ModelR ChA Любая сущность должна иметь первичный ключ, и этот ключ должен позволять однозначно определять ее как в БД, так и в "реальном" мире, иначе вы не просто сможете их отождествить, а соотвественно, грош цена тем данным, которые непонятно какую сущность описывают. Везет же людям. А мне почему-то некоторые нехорошие сущности совсем ничего должны :(. или грош цена тем сущностям, которые не описаны в БД первичным ключем на самом деле про реальный мир это бред полнейший полемический задор теоретика когда мне нужно идентифицировать объект реального мира я вешаю на него инвентарный номер, а не пытаюсь засунуть его целиком в БД зы кстати есть занятные "исключения" в парадигме - системы идентификации по образу (распознование лиц и проч) правда и в них сохраненный в БД "образ" не является первичным ключем, но что-то в этом есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 14:19 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
guest_20040621Ну в общем, ничего другого и не ожидалось. Как обычно, никаких внятных аргументов. Соответственно, отсутствует смысл дальнейшего общения. И что Вы здесь-то побираетесь ? Хотите заработать, предложите свои услуги на форуме "Работа". Уверен, Вы будете пользоваться там большим успехом. Сергей ВаскецовПроще были бы DDL-ки табличек заголовка, состава и, например, налогов по строке состава, которые ссылаются на состав (если по Вашей логике налоги "захардкодены" прямо в строке состава - не беда, придумайте сами любую табличку, которая бы ссылалась на строку состава и на любой другой совершенно "левый" справочник). А мы бы рассмотрели. А то все такие теоретики, аж жуть.Лучше пообщались бы с топикстартером, если вам есть что сказать. А я вам ничем не обязан, по большому счету, поэтому какие-либо требования или претензии ко мне неуместны. Сергей ВаскецовНа кой, простите, требовать от PK идентификации объекта в реальном мире? И вообще, где это написано?Пожалуйста, не вырывайте фразы из контекста, читайте внимательнее и желательно вдумываясь в общий смысл. Сергей ВаскецовА Вы уверены, что оно всегда мне надо? Как пример в Вашем случае, контроль уникальности №пп я вполне могу оставить до момента утверждения документа, а не выдумывать жесткие констрейнты и затем яростно обходить их при необходимости банального копирования строки. Или просто в ситуации, когда софт установлен у большого количества заказчиков, имеющих различное представление о том, какая же все-таки комбинация полей является уникальной в составе документа.Можно придумать еще много разных эмоциональных ситуаций и что дальше ? Не надо, не делайте, другими словами это уже предлагалось ранее. Сергей ВаскецовКто Вам сказал такую глупость? Есть множество ситуаций (некоторые я привел выше в этом же сообщении), когда никакой естественный ключ на таблице не может существовать как декларативное ограничение.Внимательно перечитал, увидел только надуманные проблемы реализации. Совершенно не обязательно моментальная фиксация изменений в БД в процессе редактирования объекта. Как правило, она выполняется в тразакции по окончании редактирования. А теперь попробуйте ответить себе сами, как пользователь отличает одну позицию от другой ? По суррогатному ключу ? Сергей Васкецов ChAДля зависимых сущностей этот ключ будет составным, именно потому, что они зависимые и, вообще говоря, не могут существовать вне сущности "родителя"Опаньки! То есть, в PK включаются как минимум все обязательные поля в таблице?Хоть убейте, не понимаю логики, которая привела вас к такому выводу. Сергей Васкецов ChAпоэтому к идентификатору сущности "родителя", добавляется идентификатор этой сущности в рамках родителяВопрос в целесообразности такого включения, а не в том, что если к PK добавить еще и ссылку на родителя, он останется не менее уникальным, чем был PK.Безусловно. Аргументы для включения, как и против, были рассмотрены ранее. Похоже все-таки просто зацепились за фразу и таки не удосужились прочитать топик с начала. Сергей ВаскецовЕсли ее (строки состава без заголовка) нет в реальном мире, то это не значит, что в БД не может быть связи, в которой на заголовок вообще пофигу и нет необходимости учитывать, что он должен быть. Как раз наоборот, раз есть строка состава, то и заголовок есть, так как ссылка на заголовок в составе - обязательное поле.Или я вас не понимаю, или вы сами себе противоречите, но никак не мне. А строка существует в реальном мире, как только пользователь ее ввел. Может ее еще и нет в БД, но на экране она точно присутствует. И пользователь прекрасно отличает одну похожую строчку от другой. Всего и надо-то понять, каким образом он это делает. Сергей Васкецов ChAИ эта позиция обязательно чем-то отличается от других ей подобных в этом документе.В простейшем случае, это ее номерПока документ в БД не утвержден, с ним можно делать почти что угодно, и в первом приближении не очевидно, что дял копирования строк состава необходимо уметь на лету править №пп.Забавно, сами же себе ответили на свой же, поставленный выше, вопрос. И, что характерно, он не сильно отличается от моего. Сергей Васкецов ChAВы тыкаете поставщика носом в эту строку и говорите, вот по этой позиции мне недодалиПодозреваю, в такой иллюзорной ситуации (разборки на основании счета-фактуры, а не счета или накладной) используется вовсе не №пп строки состава документа в БД, а то, что на бумажном носителе. У нас №пп хранится в строках состава и им можно управлять, хотя я вполне допускаю, что №пп может формироваться у кого-то только при печати.И что у нас на бумажном носителе ? Я предполагаю, что строки, выведенные в определенном порядке, который однозначно можно восстановить по БД. Хотя для меня лично выглядит несколько абсурдно появление в одной СФ(или накладной) нескольких абсолютно идентичных строк, различающихся, например, только количеством, или только ценой. Если, например, это один и тот же товар, то разумного объяснения такого разбиения я не нахожу. Интересно также, как будут выдавать товар в подобной ситации. Типа, чешем в затылке, потом говорим, это вот из этой кучи, а это из вон той ? Сергей Васкецов ChAНо в любом случае, есть поле, комбинация полей, которые позволяет явно отличить одну строку от другой в данном документе, как внутри БД, так и вне ее, причем сделать взаимооднозначное соотвествиеВо-первых, вообще говоря, неочевидна сама необходимость идентификации строк в БД теми методами, которые Вы предлагаете. Как минимум, потому что, во-вторых, не очевидно, что идентификация "как внутри БД, так и вне ее" должна быть одинаковой; почему бы не иметь различную идентификацию "как внутри БД, так и вне ее"? И уж совсем не понятно, зачем необходимо "взаимооднозначное соотвествие".Вполне возможно, об этом также упоминалось, но вот как вы собираетесь обойтись без соответствия я не понимаю. Данные в БД отражают некую модель реальной жизни, а не находятся в БД сами по себе. Они могут не соотвествовать реальной картине, но тогда, простите, какой в них смысл, кроме задач тестирования производительности СУБД, например ? Сергей ВаскецовДанные в БД можно испоганить множеством способов, изменить ссылку на заголовок в составе - далеко не самый нетривиальный из них.Совершенно верно. Поэтому, если есть возможность избежать их хоть в малейшей мере( смотрите замечания ModelR по поводу составных ключей), то почему бы этого не сделать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 14:33 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ChAА я вам ничем не обязан, по большому счету, поэтому какие-либо требования или претензии ко мне неуместны Да какие могут быть к Вам претензии, если Вы свои больные фантазии DDL-ем не в состоянии подтвердить. Предпочитаю обсуждать "Проектирование БД" с практиками, а не теоретиками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 14:43 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ModelR ChA Любая сущность должна иметь первичный ключ, и этот ключ должен позволять однозначно определять ее как в БД, так и в "реальном" мире, иначе вы не просто сможете их отождествить, а соотвественно, грош цена тем данным, которые непонятно какую сущность описывают. Везет же людям. А мне почему-то некоторые нехорошие сущности совсем ничего должны :(.Ну Вы-то хоть не отрывайтесь от контекста. Вот вам простой пример. Берем 10 болванок и записываем на них, например, разную музыку. А теперь вы хотите сохранить информацию в вашем каталоге(БД). Каким образом Вы сможете потом однозначно идентифицировать какому диску в каталоге соответствует реальный диск ? proposed amendmentкогда мне нужно идентифицировать объект реального мира я вешаю на него инвентарный номер, а не пытаюсь засунуть его целиком в БДВот про это и речь. Самый простой способ решения предыдущей задачи - подписываем диск. Вот вам и первичный ключ в реальном мире. В противном случае, вам придется тупо перебирать все диски на предмет соотвествия содержимого записи в каталоге, что, кстати, тоже может играть роль первичного ключа, пусть и не очень эффектвного. P.S. У меня такое впечатление, что все только и заняты вылавливанием конкретных фраз, вместо того, чтобы понять, о чем речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 14:50 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ChAНу Вы-то хоть не отрывайтесь от контекста. Вот вам простой пример. Берем 10 болванок и записываем на них, например, разную музыку. А теперь вы хотите сохранить информацию в вашем каталоге(БД). Каким образом Вы сможете потом однозначно идентифицировать какому диску в каталоге соответствует реальный диск ?Дык в простом примере конечно все просто. А вот если диски вдруг обретут волю и способность менять присвоенные им метки самостоятельно? Или менее фантастический вариант - мы не застрахованы от изменения меток кем-то третьим? Наконец вот . Для системы выглядит как таблетки самопроизвольно меняют свое наименование. ChA P.S. У меня такое впечатление, что все только и заняты вылавливанием конкретных фраз, вместо того, чтобы понять, о чем речь."Истина конкретна" /Гегель/. "Что написано пером..."/ Русск. нар. посл./. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 17:50 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ModelRДык в простом примере конечно все просто.Так я и повторял неоднократно о том, что решается все в каждом конкретном случае, учитываются все плюсы и минусы того или иного решения. Ну нет универсальных рецептов, типа, вводи суррогатные ключи и хаос исчезнет. Да никуда он не денется. ModelRА вот если диски вдруг обретут волю и способность менять присвоенные им метки самостоятельно? Или менее фантастический вариант - мы не застрахованы от изменения меток кем-то третьим?Если нет способа их идентифицировать, то какой тогда толк от информации в БД ? Что она описывает ? Вы будете вынуждены снова идентифицировать их тем или иным образом. А если информация в БД не будет коррелировать с доступной на диске, например, диски - RW. Какой смысл от каталога ? Что когда-то были диски с какими-то метками и там содержалось какая-то информация ? А насколько правдоподобна эта информация ? Ведь проверить, опять же, нельзя. Вообще, здесь можно накрутить много фантастических и не очень ситуаций, но в любом случае смысл информации в БД теряется, если ее невозможно отобразить на то, ради чего она создавалось. Собственно, эту несложную мысль в последних постах я и пытался донести. Я полагал, что она очевидна, но создается впечатление, что большинство наоборот занимаются сферическими конями в вакууме, которые к реальности не имеют ни малейшего отношения. ModelRНаконец вот . Для системы выглядит как таблетки самопроизвольно меняют свое наименование.Это обычные ошибки, которые исправляются в рабочем порядке, включая массу действий, в том числе и организационного характера. Уже давно сказано, что автоматизация хаоса не делает хаос упорядоченным. Но даже в этом примере можно увидеть, что возможность взаимоднозначного отображения все-таки осталась. Если бы ее не было, то БД можно было бы смело стирать, потому что от нее уже не было бы никакой пользы, по крайней мере той, ради которой она создавалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 19:09 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
> никаких внятных аргументов Ну то есть Вам писать чушь можно. А в ответ Вы хотите аргументированные ответы, почему это чушь? Вы хотя бы один нормальный источник можете назвать, где описывается и обосновывается ересь, о которой Вы так много рассказали? > отсутствует смысл дальнейшего общения Не пишите чуши - не будет повода для "дальнейшего общения". Все просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 21:13 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
proposed amendmentзы кстати есть занятные "исключения" в парадигме - системы идентификации по образу (распознование лиц и проч) правда и в них сохраненный в БД "образ" не является первичным ключем, но что-то в этом есть :) Поиск по вторичным ключам имеет гораздо более широкое применение. Возьмите хотя бы поисковые системы WWW. Даже используя для идентификации объектов свои корпоративные инвентарные номера, внутри БД имеет смысл использовать системные сурогатные ключи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 04:31 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ChA ModelRДык в простом примере конечно все просто.Так я и повторял неоднократно о том, что решается все в каждом конкретном случае, учитываются все плюсы и минусы того или иного решения. Ну нет универсальных рецептов, типа, вводи суррогатные ключи и хаос исчезнет. Да никуда он не денется.+1 ChA ModelRА вот если диски вдруг обретут волю и способность менять присвоенные им метки самостоятельно? Или менее фантастический вариант - мы не застрахованы от изменения меток кем-то третьим?Если нет способа их идентифицировать, то какой тогда толк от информации в БД ? [] Т.е. или 100% или никак? а если есть возможность обеспечить (разумными усилиями) только 99,7% точности идентификации - этого коня выбрасывем в вакуум? Мне кажется Вы излишне абсолютизируете это дело. Либо путаете идентификацию объекта внешего мира с идентификацией записи в БД. БД, умеющая иденифицировать лишь 99,7% своих записей - действительно забавно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 10:07 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
ChA Это азы РМД. Любая сущность должна иметь первичный ключ, и этот ключ должен позволять однозначно определять ее как в БД, так и в "реальном" мире, иначе вы не просто сможете их отождествить, а соотвественно, грош цена тем данным, которые непонятно какую сущность описывают. Т.е., "естественный" ключ должен быть всегда, другое дело, что по вполне очевидным причинам мы, как правило, делаем его альтернативным, а вместо него делаем суррогатный, который всегда остается внутри системы. Для зависимых сущностей этот ключ будет составным, именно потому, что они зависимые и, вообще говоря, не могут существовать вне сущности "родителя", поэтому к идентификатору сущности "родителя", добавляется идентификатор этой сущности в рамках родителя. Давайте я попробую привести два примера: 1. Представьте себе сайт типа Одноклассники,ру, и таблицу фотографий. Допустим она содержит четыре содержательных поля:ссылку на человека, саму фотографию, дату и свободный комментарий. Похоже, что ни одно из последних трёх полей не может быть частью первичного ключа. Предоставим возможность посетителям оценивать и комментировать фотографии. Естественно, запись таблицы комментариев должна содержать ссылку на фотографию, так? Какой "естественный" первичный ключ Вы можете предложить? 2. Представьте, я покупаю в магазине носки. 5 пар. Вроде одинаковых. В чеке (а его содержание хранится в базе), 2 строчки. Первая, ссылка на товар (носки такие-то), и количество 4. Вторая, ссылка на товар (носки такие-то), количество 1 и ещё два поля: свободный комментарий "носки слегка выгорели" и скидка 15%. Какой "естественный" первичный ключ Вы можете предложить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 09:19 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
drev Какой "естественный" первичный ключ Вы можете предложить? Итак. 1.Номер комментария, а вот естественный или искусственный это первичный ключ - куй знает. 2.Номер покупки - то же самое. Если у разработчика БД возникают сомнения с PK - лучше вешать простой PK на каждую запись таблицы. "Сущностные" ограничения задавать с помощью констраинтов или уникальных индексов. Поддержание реляционной целостности - задавать отдельно. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 11:43 |
|
||
|
Ключи в моей БД - уникальный счетчик или составной?
|
|||
|---|---|---|---|
|
#18+
If you create database tables (it's usually not you, I know, but IF...), NEVER-NEVER-NEVER (!!!) use fields, having any real-life meaning, as a primary key! Even if you are sure the values are unique and required in the business! Such keys are named "natural keys". ALL PRIMARY KEYS MUST SIMPLY BE NUMERATORS (1, 2, 3 ETC.) HAVING NO OTHER CONTEXT BESIDES BEING RECORS IDENTIFIERS! Such keys are named "surrogate (synthetic) keys". For example, you create an information system for a company where each worker already have employee number - don't use that number as the employees table's primary key! Instead, create other one, like emp_id. In addition, you can create a field to keep the existing employee numbers, and "hang" on it the NOT NULL and UNIQUE constraints (as well as for other "real-life" fields like Social Insurance Number) - why not? The databases theory calls such fields "candidate keys" - they are like candidates to be elected as primary keys, but don't allow them to win the elections! A lot of data architects don't realize which problems developers encounter with when natural keys are used. The small problem - when a table have a combination of multiple fields (sometimes 5-8!!!) as its primary key, developers are forced to declare (and pass between objects) multiple variables in places where one would enough to identify the record, and write extra-inflated, haircurling, bugs-prone WHERE clauses. There is also more serious problem which can appear when an information system needs to be changed as result of business requirement changes. Imagine, one day the client stops to manage employee numbers (other example - duplicate ID cards numbers found in at least one country as I know). You will change the functionality (relationships between database and GUI application's objects) spending a lot of time to re-build and re-test the system. But if you have used surrogate PKs - you don't need to perform such "black" work, you are OK because the primary key's meaning has not been changed - it is still a primitive numerator, not more! Programmer, simplify your life! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 20:52 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35002902&tid=1544138]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
167ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 437ms |

| 0 / 0 |
