|
|
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
2 stenf Вспоминаются времена, когда ссылка на В.И.Ленина была истиной в последней инстанции. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2007, 16:37 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
mv 2 stenf Вспоминаются времена, когда ссылка на В.И.Ленина была истиной в последней инстанции. Эти времена для некоторых и поныне продолжаются, даже здесь, на форумах sql.ru :( Вот здесь , например, на предложение проверить необоснованное утверждение, человек отвечает "Желаете проверить - я предложил вам алгоритм, а лично я доверяю Хендерсону." или "Кто не доверяет, тот пусть и проверяет. И результат в студию доставляет"... stenfЕсли вы вдруг не в курсе, программы в общем случае не должны содержать нестандартных ходов и решений, а концепция любимых вами указателей как таковых и вообще убрана к примеру из .NET, ибо они привносит массу проблем. ...а в версию 2.0 добавлены нелюбимые вами nullable-типы, наверное из вредности (дескать, маловато проблем осталось ;) 5 копеек по теме: проблемы наподобие этих - " хотелось-бы все-таки обеспечить ссылочную целостность структурой базы, а не хитрыми финтами ушей " (в ответ на " Пробивать информацию в два приема: insert в изделия - insert в детали - update изделий с установкой id детали .") или " Но как в этом случае занести запись в Детали, ведь там должна быть ссылка на изделие, т.е. в случае нулевой сборки на то-же ID, что имеет сама деталь, а в момент вноса он еще неизвестен ." и т.п. могут быть 1) техническими, т.е. "...а в момент вноса он еще неизвестен" только потому, что используется такой механизм identity, значит, решение может быть в использовании другого механизма получения значений ИД...; "...ссылочную целостность структурой базы..." - использовать nulls, и т.д. 2) логическими, т.е. "...а в момент вноса он еще неизвестен." потому как бизнес-процесс таков, т.е. целостность достигается "в два такта", значит, нужно "легализовать" состояние между тактами, например, добавить соответствующее значение для статуса записи - "недовведенная/неправильная/неинициированная/неактуальная", ну и соответствующее отношение к записям с таким статусом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2007, 18:24 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
> в таком случае для начала напишите что вы понимаете под заказчиком > и где он должен находиться Дружище, все, что я хотел написать, я написал: форум "работа" - максимум, что можно порекомендовать в Вашей ситуации. Вы занимаетесь не своим делом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2007, 18:24 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Дружище, все, что я хотел написать, я написал ага, написать что такое заказчик вы не можете, зато можете давать советы космического масштаба и космического-же идиотизма (С) mv Вспоминаются времена, когда ссылка на В.И.Ленина была истиной в последней инстанции. есть два варианта появления данного поста 1) Вам просто так вдруг вспомнился Ленин 2) Вы намекаете, что не всегда можно верить публикациям. Для второго варианта: хотя я и избежал счастливой необходимости изучать Ленина, тем не менее мне представляется, что его идеи по поводу построения счастливого будущего вполне годились для той модели мира, которую они строили. Модель оказалась ошибочной. Но вы-же не утверждаете, что реляционная модель БД является ошибочной, следовательно надо иметь веские основания для критики известных публикаций по поводу этой модели. softwarer Я такой идеи не выдвигал, с чего Вы ее взяли - не знаю читаем: softwarer Концепция null не "неверна", она "гениальна". Другой вопрос, что как и реляционная теория вообще, для удачного применения она требует некоторого особенного понимания, взгляда на мир, некоего особого винтика в мозгу, который, к сожалению, некоторым просто не дан. хотите поупражняться в лексическом разборе предложения? Вопрос из четвертого-пятого класса общеобразовательной школы - к какому существительному относиться выделенное слово "она" ? softwarer Лично я полагаю еще более правильной следующую концепцию: Hе иди по течению, не иди против течения, иди туда, куда тебе надо. программирование - это вам не карате с дзюдо, где вы сами вырабатываете стратегию достижения победы (хотя и там нельзя использовать запрещенные приемы). Программирование - это коллективный вид спорта. Вот как вы думаете, как-бы следовало поступить с футболистом, который во время игры чемпионата упорно пытается забить мяч в свои ворота, а на законное замечание тренера "ты что делаешь сволочь", отвечал-бы "что мне надо, то и делаю" ? За некоторым процентом исключений, вы делаете проекты с людьми, и сопровождать их тоже будут другие люди. Заявления типа "делаю как мне нравиться" тут неприемлемы. softwarer Прежде всего я сказал, что они позволяют легко и естественно описать взаимоотношение "необязательности" Блин. Дело-то не в процессе описания, а процессе сопровождения этого описалова. softwarer доставляющее уйму проблем при попытке описать его каким-либо другим образом про уйму проблем пожалуйста поподробнее. softwarer Подход плох несколькими вещами: во-первых, большим количеством ненужных join-ов, во-вторых, тем, что надо постоянно помнить о необходимости использовать с этой таблицей outer join, наконец, в лишних тратах на эти дополнительные таблицы softwarer, при всем к вам уважении это - детские аргументы. Вам что, join'ны не нравяться ? Они - основа всей теории. Может тогда и нормализацию не производить, она знаете тоже к join'нам приводит ? У вас какая-то избирательная любовь к теории - тут люблю, тут не люблю. Join'ы при нормализации это нормально, а вот при null - нет. Null между прочим тоже не бесплатный, серверу приходиться тратить на сопровождение столбца null определенное количество ресурсов. softwarer То есть, Вы строите ситуацию: есть бизнес-правило, мы хотим "подарить бесплатные минуты", бизнес-правило этому препятствует. И общий контекст - это бизнес-правило нестрашно нарушить, вот один из примеров, когда нарушить его можно и нужно. Это я и называю "хакнуть". В противовес нормальному подходу: учесть новое требование и доработать под него систему. в том примере было лишь показана разница между бизнес-правилами: те, которые вероятно в будущем изменяться, и те, которые железно будут действовать, ибо того требует логика реальности, а не бизнес заказчика ;) softwarer Вот! Это страшная, недопустимая точка зрения, и именно поэтому Вы думаете, что foreign key - основа. Поймите, данные - не просто "самое ценное, что есть в базе". Это на самом деле единственная ценность, которая там есть. Неверные данные - куда хуже неверной структуры. Смотря с точки зрения "самой базы", Вы выступаете с точки зрения небезызвестного персонажа Райкина, вопрошавшего: "к пуговицам претензии есть?". по сути, вышеприведенный ответ годиться и тут. Если бизнес-правило это позволяет, то неверными эти данные нельзя считать. softwarer Скажем, абстракция "проводка" не представляется мне "очевидной". Однако, очень широко используется, и все добросовестно изучают, что же это такое. Ох, а уж какая не то чтобы хорошая идея, например, "аналитического счета"..... Вы говорите парадоксами. То отвергаете теоретически верные аргументы на той-лишь основе, что высказаны они Селко/Хендерсоном/Дейтом etc, а они вовсе и не авторитеты для вас, то показываете пальцем на неверные (по вашему) метафоры и говорите - видите там гланды через задницу удаляют ? Значит и я так поступать имею право - все из окна прыгают, и я туда-же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2007, 21:51 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
> ага, написать что такое заказчик вы не можете Дружище, у меня нет ни малейшего желания гадать, какой дебил что под этим подразумевал. Я не могу всем ламерам подряд читать курс проектирования: ни времени, ни желания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2007, 23:57 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
вот один из минусов форумов как раз в том, что здесь тусуется масса людей с непролеченным комплексом неполноценности, уверенными что они являются гигантами мысли современности, однако неспособные ответить на элементарные вопросы и срывающиеся на тупые оскорбления и флейм когда им на это указывают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 08:49 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfвот один из минусов форумов как раз в том, что здесь тусуется масса людей с непролеченным комплексом неполноценности, уверенными что они являются гигантами мысли современности, однако неспособные ответить на элементарные вопросы и срывающиеся на тупые оскорбления и флейм когда им на это указывают Смею предположить с точностью до наоборот. "Проектирование БД" на скуль.ру - единственный форум в рунете, где буйволы, саблезубые тигры и тиранозавры БД сносят друг другу рога, копыта и прочие части тела. Ну, я же конечно, мелкий домашний кот, которому непонятны слова "датамологическая модель", "Селко". Однако мне плевать. По сабжу выходит, что естественной для для представления заданых данных является сетевая модель. Сетевая модель - это даже не дерево. Это сильно запутаный симбиоз деревьев. Можно реализовать это в РМД, если известно, что число поколений потомков будет фиксировано. Можно - если даже не будет фиксировано. Но это такой геморой! Честно говоря, я не вижу приемлемого решения в рамках РМД. Есть там нул, нет там нул - неважно. И я честно об этом говорю, а не перевожу дискуссию в сравнение знаний друг друга. Одно радует. В рамках задачи вроде нет агрегатных функций, Тогда, действительно можно написать сетевую базу. Однако надо помнить, что в свое время они померли из-за своей уникальности и непереносимости на другие предприятия, от того, что их поддержка требовала слишком большого на тот момент труда большого количества высококвалифицированных специалистов. Время идет и написать это уже можно. Работать будет медленнее, чем РБД, но будет адекватно отражать состояние. Впрочем, вроде Оракл умеет делать рекурсивные запросы и на нем можно будет реализовать сетевую модель? Не знаю, не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 17:44 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
Дружище stenf, поверьте на слово, я дал лучший совет из возможных. Во-первых, Вы будете избавлены от решения задач, в которых ровным счетом ничего не понимаете. Во-вторых, нормальный архитектор заработает на решении Вашей задачи немного денег. В-третьих, Вы будете иметь возможность внимательно изучить его работу и не задавать более идиотских вопросов. Ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 18:25 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
guest_20040621. Гм. Я считаю себя архитектором и тоже вижу пугру в первоначальной постановке задачи stenf'ом, но на то и ахитектор и/или системный аналитик, что бы вытрясти из заказчика, что ему надо на самом деле. Но я бы рискнул проектировать это только за очень большие бабки. И только с авансом. И никак не на форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 18:32 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenf. Извини. Я не теоретик. Просто я пургу нутром чую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 18:33 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
> Я считаю себя архитектором Смелое заявление. Хотите пару-тройку простеньких вопросов, чтобы хм... чуть поколебать Вашу самооценку? ;) Я не могу назвать архитектором ни одного из авторов, пишущего в разделе "проектирование" на sql.ru (по крайней мере, пишущего последние пару лет). Человек пять - семь имеют подготовку на приемлемом уровне, остальные - коматозное ламо, в лучшем случае выросшее из dba. Архитектор - это как маркер универсальной квалификации; как правило, обычный разработчик специализируется на определенных задачах (причем, большинство - на тупых задачах типа учетных; не потому, что разработчики глупые, а потому, что за решение этих задач в России стабильно платят). Я не встречал здесь ни одного теоретического обсуждения, связанного с проектированием. Хм... хотя нет, одно все-таки было. С абсолютно тупым тезисом, что теория множеств решает все проблемы нормализации (или что-то в этом роде). В общем, туго в России с проектированием. Так что к позиционированию "Я считаю себя архитектором" я склонен относиться подозрительно. ;) > я бы рискнул проектировать это только за очень большие бабки Да нечего тут проектировать. Типовая задача с типовой структурой данных, которую баксов за двести решит любой первокурсник. > И никак не на форуме. Напрасно. Видите ли, в чем дело: проектированию баз данных в принципе нигде не учат. Хорошее, качественное проектирование - оно где-то на стыке кучи дисциплин. Есть фундаментальная вещь - "Введение в системы..." Дейта, но она - об основах проектирования. Практически ни слова о наиболее важных приемах и методах. Так вот форум - универсальное средство для контактов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 20:35 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Дружище stenf, поверьте на слово, я дал лучший совет из возможных давай давай, дружище профессиональный архитектор, идите к доктору. Он вам обьяснит причины появления столь настойчивого желания помогать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2007, 08:35 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
> профессиональный архитектор Я - не профессиональный архитектор, Вас кто-то обманул. А вот Вы, к сожалению, просто обычный хам. Куча амбиций и ноль знаний. Ничего личного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2007, 15:37 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
тоже ничего личного, но я по крайней мере здесь никого дебилами не обзывал, так что кто здесь хам - это еще посмотреть надо. И вообще, ну не хотите постить по теме - ну так вообще не постите, поверьте, у меня нет никакого желания тут с вами переругиваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2007, 18:38 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfчитаем: Виноват, очень неудачно сформулировал, и Вы вполне правы, восприняв это утверждение именно так, как сказали выше. Прошу далее не учитывать эту цитату, попробую объяснить поудачнее. null требуют того же самого винтика, что и sql вообще. Они упрощают работу в "sql-стиле" и усложняют работу в алгоритмическом стиле. stenfпрограммирование - это вам не карате с дзюдо, где вы сами вырабатываете стратегию достижения победы (хотя и там нельзя использовать запрещенные приемы). Программирование - это коллективный вид спорта. Вот как вы думаете, как-бы следовало поступить с футболистом, который во время игры чемпионата упорно пытается забить мяч в свои ворота, а на законное замечание тренера "ты что делаешь сволочь", отвечал-бы "что мне надо, то и делаю" ? За некоторым процентом исключений, вы делаете проекты с людьми, и сопровождать их тоже будут другие люди. Заявления типа "делаю как мне нравиться" тут неприемлемы. Дружище, рассказывать банальности так, чтобы они приходились к месту - большое искусство, и в нем у Вас еще есть, куда расти. Судя по направлению Вашего текста, Вы не поняли сказанного либо не захотели понять и предпочли увести тему в сторону. Этим, пожалуйста, занимайтесь без меня. stenfБлин. Дело-то не в процессе описания, а процессе сопровождения этого описалова. В том числе. Простую и естественную модель сопровождать куда проще и удобнее, нежели искусственную и сложную. stenfпро уйму проблем пожалуйста поподробнее. Хм. Видите ли, способов обойтись без null можно придумать много, проблемы соответственно в разных случаях разные. Перечислить все - пожалуй, черезчур много текста. Так что пожалуйста выделите тот путь, который нравится Вам, обсудим его. Основной с моей точки зрения - "пожалуйста поподробнее" ниже в том письме, на которое Вы отвечаете. stenfsoftwarer, при всем к вам уважении это - детские аргументы. Вам что, join'ны не нравяться ? Они - основа всей теории. Может тогда и нормализацию не производить, она знаете тоже к join'нам приводит ? У вас какая-то избирательная любовь к теории - тут люблю, тут не люблю. Видите ли в чем дело, если смотреть на теорию фрагментарно, чужие взгляды заведомо покажутся фрагментарными. Нормализация - часть теории. Денормализация - другая часть. Истина - посередине. Мне нравятся "правильные join-ы на своем месте" и не нравятся "неправильные join-ы там, где они вредны". Лично мне этот подход кажется вполне целостным. Join - механизм с определенными потенциальными возможностями и определенной стоимостью. Его следует применять там, где он дешевле альтернатив, и не следует применять там, где траты на него неоправданны. stenfJoin'ы при нормализации это нормально, а вот при null - нет. В целом так. Нормализация дает серьезные преимущества, и цена join-а в большинстве случаев является более чем адекватной платой за них. Отказ от null-ов в данном варианте не дает преимуществ, сравнимых с ценой. stenfNull между прочим тоже не бесплатный, серверу приходиться тратить на сопровождение столбца null определенное количество ресурсов. Охх. Вот это уже детский аргумент. Цена null, если говорим о серверных ресурсах - один байт (иногда ноль, но не будем углубляться), и соответственное время на чтение-анализ. Цена лишнего join-а - как минимум лишний full index scan, далее зависит от плана запроса, но в любом случае траты просто несравнимы. stenfв том примере было лишь показана разница между бизнес-правилами: те, которые вероятно в будущем изменяться, и те, которые железно будут действовать, ибо того требует логика реальности, а не бизнес заказчика ;) Как я Вам показал (на примере счетов, оторванных от банков) таких вот "железно будут действовать" не существует. Но вопрос не в этом. Вероятность изменения того или иного бизнес-правила никак не связана с тяжестью при его нарушении, а напомню, обсуждаем мы именно последнее. stenfпо сути, вышеприведенный ответ годиться и тут. Если бизнес-правило это позволяет, то неверными эти данные нельзя считать. Еще раз, медленно и печально: бизнес-правило этого не позволяет. И Ваши фантазии на тему "в будущем бизнес-правила могут измениться так, чтобы позволять" не имеют отношения к сегодняшним проблемам, к проблеме разрушенных, бесполезных и даже вредных данных. stenf softwarer Скажем, абстракция "проводка" не представляется мне "очевидной". Однако, очень широко используется, и все добросовестно изучают, что же это такое. Ох, а уж какая не то чтобы хорошая идея, например, "аналитического счета"..... Вы говорите парадоксами. То отвергаете теоретически верные аргументы на той-лишь основе, что высказаны они Селко/Хендерсоном/Дейтом etc, а они вовсе и не авторитеты для вас, то показываете пальцем на неверные (по вашему) метафоры и говорите - видите там гланды через задницу удаляют ? Парадоксами? Вы, пардон, сказали не самую разумную вещь - "необходимо, чтобы абстракция казалась очевидной". Я привел Вам пример общеизвестной и общеиспользуемой абстракции, очевидной не являющейся. Если это для Вас парадокс - хорошо. Теперь следует правильно его оценить и уточнить теорию, на основании которой Вы в этот парадокс вляпались. Если Вы считаете, что проводки - это "удалять гланды через задницу", я уверен, тысячи присутствующих здесь с громадным удовольствием выслушают рассказ о превосходящих альтернативных решениях. Далее, по поводу теории. Я ее нежно люблю и уважаю. Но к сожалению, кроме теории существует еще одна важная вещь, в нашем случае куда более сложная и неоднозначная, а именно правильное применение теории. Как Вы вероятно знаете, существует определенный пренебрежительный взгляд к теории. Во многом он неправилен, но часть оснований для него дают сами теоретики, выдвигая воззрения, похожие на небезызвестное "лучше быть здоровым и богатым, нежели бедным и больным". Да, лучше. Но не всегда возможно. И подобное... примитивное восприятие теории, к сожалению, оказывается слишком уж непрактичным. stenfЗначит и я так поступать имею право - все из окна прыгают, и я туда-же Cтоп-стоп-стоп. Это Вы, пардон, все время апеллируете к "современным течениям в программировании" и прочим "все из окна прыгают". Я сказал строго наоборот - "иди туда, куда тебе надо". Будет нужно для задачи - прыгну из окна, не будет нужно - не прыгну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2007, 14:35 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfЛюбая концепция, требующая особых винтиков в голове не должна применяться в программировании, потому-что это усложняет сопровождение программ и является потенциальным источником ошибок. Категорически несогласен. Программирование требует не то, что особых винтиков - требует особый взгляд на вещи вообще. И если ты не понимаешь какую-то технологию, это не повод на неё плевать и идти восторгаться дотнетом. Я не понимаю указателей, я не понимаю ООП, но нутром чую, что это круто и стараюсь понять. Я много писал на php, которое вообще ничего не требует и меня тошнило. ОФФ: softwarer"опытный гонщик и на запорожце опередит ламера на субару". :) Не опередит, конечно же! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2007, 12:13 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
Frankie И если ты не понимаешь какую-то технологию, это не повод на неё плевать и идти восторгаться дотнетом. Я не понимаю указателей, я не понимаю ООП, но нутром чую, что это круто и стараюсь понять. Я много писал на php, которое вообще ничего не требует и меня тошнило. дело не в технологии, а в относительной сложности применяемых технологий. softwarer Они упрощают работу в "sql-стиле" ну как-же упрощают, когда наоборот усложняют ? Для разнообразия, могу привести цитату другого "столпового" автора данной тематики - Кален Дилейни: "As you know, I strongly recommend that you minimize the use of NULL... introducing NULL will be a source of bugs just waiting to happen" softwarer Дружище, рассказывать банальности так, чтобы они приходились к месту - большое искусство, и в нем у Вас еще есть, куда расти. хм, вы по совместительству литературный критик ? Не люблю, когда меня критикуют люди, заведомо ничего не понимающие в предмете своей критики. softwarer Судя по направлению Вашего текста, Вы не поняли сказанного либо не захотели понять и предпочли увести тему в сторону странные вы вещи говорите, гражданин softwarer. Хорошо, давайте проследим источник последней "банальности". softwarer: Другой вопрос, что как и реляционная теория вообще, для удачного применения она требует некоторого особенного понимания, взгляда на мир, некоего особого винтика в мозгу, который, к сожалению, некоторым просто не дан. ->Вы правда сказали, что здесь неправильно сформулировали свою мысль, однако в данном контексте это пока неважно stenf: Любая концепция, требующая особых винтиков в голове не должна применяться в программировании, потому-что это усложняет сопровождение программ и является потенциальным источником ошибок. Это как множественное наследование в ООП, может и хорошее изобретение, расширяющее возможности программиста, только вот например Steve McConnell (не дай бог скажите что теоретик) советует держаться подальше от такого счастья (stenf) softwarer: Ага. Стандартный подход программиста на Visual Basic. Но лично мне ближе мнение Джоэля. Куда проще проверить, способен ли человек работать с указателями (тоже одна из концепций, требующих винтиков в голове) и не брать тех, кто не способен. stenf: поздравляю, вы движитесь против основных течений в современном программировании. Если вы вдруг не в курсе, программы в общем случае не должны содержать нестандартных ходов и решений softwarer: Hе иди по течению, не иди против течения, иди туда, куда тебе надо. Какой вывод напрашивается из данных цитат ? А такой, что вы предпочитаете действовать по принципу "зачем делать просто, когда можно сложно. Достаточно набрать соответствующую команду". Аналогия с футбольной командой вполне к месту. softwarer stenf softwarer Прежде всего я сказал, что они позволяют легко и естественно описать взаимоотношение "необязательности" Блин. Дело-то не в процессе описания, а процессе сопровождения этого описалова. Простую и естественную модель сопровождать куда проще и удобнее, нежели искусственную и сложную. вообще-то, если легко и естественно описать не обязательно получиться простая и естественная модель . softwarer Join - механизм с определенными потенциальными возможностями и определенной стоимостью. Его следует применять там, где он дешевле альтернатив, и не следует применять там, где траты на него неоправданны. ... Цена null, если говорим о серверных ресурсах - один байт (иногда ноль, но не будем углубляться) почему-же не будем углубляться, раз аргумент трата ресурсов на лишние join'ы является козырем вашей аргументации, так давайте копнем туда. Копать будем в SQL Server 2000. В данной реализации, количество израсходованных байт под битовую маску, описывающую какие столбцы позволяют null, действительно не зависят от того, какие столбцы позволяют null - она есть всегда, для любой таблицы, в независимости есть-ли там nullable столбцы. Зато если столбец позволяет null, то для каждой обрабатываемой строки столбца сервер должен декодировать маску, что-бы определить, есть-ли там null. Делается это не за счет доброго дяди, а за счет ресурсов компьютера. Хотя безусловно, для одной строки это является каплей в море. Дальше в качестве примера я возьму тему данного топика, к счастью она хорошо тут подходит: Предположим, что вместо null я применил "извращенный" вариант с еще одной таблицей, и теперь для получения данных об изделии требуется лишний join. В нашей системе таблица Детали является одной из ключевых, с ней работают буквально все модули системы (производственный, технологический и т.п.). Пользователи этих модулей постоянно делают запросы к базе вида "покажи все детали изделия", "покажи входимость деталей изделия" и т.п. Однако при этом их не интересуют параметры изделия как такового, эти параметры запрашиваются приложением автоматически при его запуске, что происходит обычно один раз в день . Таким образом, лишний join к промежуточной таблице будет происходить 1 раз в противовес бесчисленным запросам к таблице Детали на протяжении 8 часов рабочего дня. (в реальности это реализовано не совсем так, но для иллюстрации сгодиться). Возможно, эти затраты все равно не перекроют этот join, однако говорить об несравнимых затратах я бы уже не стал. Грубо говоря, ваша идея не учитывает случаи, когда количество лишних join'ов много меньше общих обращений к таблице. Что еще более плохо, запрос на получение всех деталей изделия теперь вместо простого select * from Детали where IDИзделия = 21 может быть составлен как select * from Детали where coalesce(IDИзделия, IDДетали) = 21 из-за необходимости учета нулевой сборки, и помимо усложнения его синтаксиса мы еще и можем получить index scan вместо index seek softwarer Цена лишнего join-а - как минимум лишний full index scan тут не понял, почему обязательно scan, а не seek ? И еще по null'ам: я уже говорил, что согласен с тем, что полное избавление то null - это крайний случай. Например мне кажется логичным высказываение одного из "столпов" (не помню какого), что если-уж применять их, то в случаях, когда в текущий момент времени значение поля неизвестно, но обязательно появиться в будущем. Например у меня в системе каждая производственная партия деталей рождается с null в поле IDТехнологии (ссылки на технологию производства данной партии). Но это лишь потому, что через несколько дней/недель эта ссылка там появиться. Перманентное-же существование null мне не кажется оправданным. softwarer Как я Вам показал (на примере счетов, оторванных от банков) таких вот "железно будут действовать" не существует. вот как раз вы и показали мне пример хакерства в базе - грубое нарушение заложенных в нее принципов. Например я, если какой-нибудь умник при сопровождении моей системы, для обхода логической проблемы оторвет детали от ссылок на изделия и напортачит с данными - сначала заставлю вернуть все на свои места, а уж затем исправлять проблемы softwarer Вы, пардон, сказали не самую разумную вещь - "необходимо, чтобы абстракция казалась очевидной". Я привел Вам пример общеизвестной и общеиспользуемой абстракции, очевидной не являющейся. Если это для Вас парадокс - хорошо. Теперь следует правильно его оценить и уточнить теорию, на основании которой Вы в этот парадокс вляпались Раз уж цитируете, то цитируйте до конца - "необходимо, чтобы абстракция казалась очевидной и другим людям " ;) Откуда у вас такая уверенность, кто из нас вляпался ? Приведу еще одну цитату: "Метафоры имеют одно неоспоримое достоинство - описываемое ими поведение предсказуемо и понятно всем людям. Это сокращает объем ненужной коммуникации, способствует достижению взаимопонимания ..." (Fernando J. Corbaty, процитирован С. Макконнеллом). Ваш розовый слон в общем случае не обладает предсказуемым (с точки зрения других людей) поведением, и не сокращает объем коммуникации. Прямо скажем, все как раз наоборот. Даже с очевидными и ясными метафорами возникают проблемы, потому-что метафора по определению описывает лишь часть свойств объекта, и надо четко представлять себе, какие из свойств реального объекта не следует принимать во внимание. Когда-же метафора ничуть не яснее чем описываемый логический обьект - то она только мешает. К примеру, я могу думать, что розовый слон розовый, потому-что чем-то болеет и его надо отвести к ветеринару, а кто-то другой подумает, что розовый цвет объясняется розовыми цветами, на которых этот слон пасется. Реальная-же причина запрятана у вас в голове и может означать что-то совсем другое. softwarer Если Вы считаете, что проводки - это "удалять гланды через задницу", я уверен, тысячи присутствующих здесь с громадным удовольствием выслушают рассказ о превосходящих альтернативных решениях ну и напрасно вы тут так злорадничаете, я понятия не имею что такое проводка. Вы сами сказали, что эта абстракция неочевидна. Однако если вы хотите этим оправдать появление на свет вашего еще менее очевидного слона - то вы на неверном пути ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2007, 22:42 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenf softwarerОни упрощают работу в "sql-стиле" ну как-же упрощают, когда наоборот усложняют ? Так. Упрощают. stenfДля разнообразия, могу привести цитату другого "столпового" автора данной тематики - Кален Дилейни: Хм. Скажите, а Вас не затруднит приводить кого-нибудь кроме MSSQL-щиков? Во-первых, я мало знаком с ними, во-вторых, безоговорочно доверять им я готов исключительно в вопросах внутренней архитектуры MSSQL. stenf "As you know, I strongly recommend that you minimize the use of NULL... introducing NULL will be a source of bugs just waiting to happen" Я не готов оценивать фразу, не зная подразумеваемого для нее контекста. Скажем, ее вполне можно сопоставить известной привычке MSSQL-щиков писать несколько простых запросов вместо одного сложного, связывая их процедурным кодом. stenf softwarerДружище, рассказывать банальности так, чтобы они приходились к месту - большое искусство, и в нем у Вас еще есть, куда расти. хм, вы по совместительству литературный критик ? Не люблю, когда меня критикуют люди, заведомо ничего не понимающие в предмете своей критики. Помилуйте, откуда же "литературный"? Вы пересказали банальность из книги, пересказали ее совершенно не в кассу; чтобы "критиковать" Вас за это, незачем быть Виссарионом Григорьевичем, достаточно понимать суть предмета обсуждения. stenfКакой вывод напрашивается из данных цитат ? Эту тему я даже специально упомянул в своем FAQ: http://softwarer.ru/about.html#Derivations stenfА такой, что вы предпочитаете действовать по принципу "зачем делать просто, когда можно сложно. Дружище, если из всего многообразия "иди куда нужно" Вы видите одно-единственное направление движения - это шоры Вашего мышления, ничего более. И в строгом соответствии с предыдущей ссылкой выдаете это как "мне сказали именно это". stenfАналогия с футбольной командой вполне к месту. Аналогия с футбольной командой вполне к месту в почти любом обсуждении командной работы. Само обсуждение командной работы здесь абсолютно не к месту. Кроме того, уж простите, слушать пересказ из книг того, что Вы сами не пробовали, мне не очень интересно. stenfвообще-то, если легко и естественно описать не обязательно получиться простая и естественная модель . Вы хотите поспорить о формальной логике? Можно в принципе, хотя лениво. А если неформально, то "практически обязательно". Чтобы получилась "непростая и неестественная", надо описывать не "легко и естественно", а "тупо и формально", что отнюдь не синонимы. stenfКопать будем в SQL Server 2000. /me борется с желанием произнести что-нибудь типа "брось бяку" ;-) stenfЗато если столбец позволяет null, то для каждой обрабатываемой строки столбца сервер должен декодировать маску, что-бы определить, есть-ли там null. Делается это не за счет доброго дяди, а за счет ресурсов компьютера. Хотя безусловно, для одной строки это является каплей в море. Это для любого количества строк является каплей в море. "Декодирование маски" делается парой ассемблерных команд; поверьте, трудно найти задачу, которую компьютер решает эффективнее. Разница лишь в том, что для некоего "разумного количества строк", например до 10.000.000, это будет "капля в море вообще, в абсолютных числах", а для большего количества - "капля в море относительно других операций, которые придется провести с теми же данными". stenfОднако при этом их не интересуют параметры изделия как такового, эти параметры запрашиваются приложением автоматически при его запуске, что происходит обычно один раз в день . То есть, если я Вас правильно понял, ваше приложение чихает на понятие "согласованность данных"? И если вдруг меняются параметры изделия, Вы подходите к мегафону и громко-громко-громко говорите "Всем пользователям системы перевойти в нее"? Впрочем, это лирика в сторону. stenfТаким образом, лишний join к промежуточной таблице будет происходить 1 раз в противовес бесчисленным запросам к таблице Детали на протяжении 8 часов рабочего дня. (в реальности это реализовано не совсем так, но для иллюстрации сгодиться). Возможно, эти затраты все равно не перекроют этот join, однако говорить об несравнимых затратах я бы уже не стал. Хм. О "несравнимых затратах в данном конкретном случае". Оптимизация - такая вещь, что для любого случая можно сконструировать обратный. Скажем, несложно построить пример, в котором для запроса вида SELECT * FROM TABLE WHERE ID = :ID предпочтительным методом доступа будет FULL TABLE SCAN, а индекс пойдет нервно курить в сторонке. Однако, когда мы вот так, на пальцах, обсуждаем эффективность-неэффективность глобальных подходов, имхо естественно говорить о типичных случаях. stenfГрубо говоря, ваша идея не учитывает случаи, когда количество лишних join'ов много меньше общих обращений к таблице. В первую очередь: я не знаю MSSQL и могу ошибиться, но мне кажется, Вы в своем рассуждении проглядели одну маленькую подробность. Если типичный запрос не пользуется данными пристыковочной таблицы, в случае одной таблицы он также не будет лезть "декодировать маску" для этих данных и соответственно не будет тратить на это ресурсы. Таким образом, Ваш пример сводится к противопоставлению в запросе "один раз в сутки", где join скорее всего также проиграет. Хм. "Моя идея" относится к статистически значимой выборке. Скажем, "что будет, если взять случайную систему, и в ней во всех местах - а не в одном-единственном, как в Вашем примере - заменить null поля введением дополнительных таблиц". Я - так уверен, что с малоотличимой от единицы вероятностью система замедлится. stenfЧто еще более плохо, запрос на получение всех деталей изделия теперь вместо простого select * from Детали where IDИзделия = 21 может быть составлен как select * from Детали where coalesce(IDИзделия, IDДетали) = 21 из-за необходимости учета нулевой сборки, и помимо усложнения его синтаксиса мы еще и можем получить index scan вместо index seek Этого, пардон, я совершенно не понял. Собственно, сама по себе фраза coalesce(IDИзделия, IDДетали) говорит о кривой структуре данных (несравнимые вещи сводятся под одной крышей). О какой структуре данных идет речь? К сожалению, я не имею представления, что такое "нулевая сборка", но в любом случае прежде всего - нарисуйте, пожалуйста, какую структуру Вы сравниваете, и с какой. Ну а в целом - ответ тот же, что и про оптимизацию. В любом случае, можно подобрать структуру БД и профиль запросов, отвратительно соответствующие друг другу. Но из этого ничего особенного не следует. stenfтут не понял, почему обязательно scan, а не seek ? Не то чтобы "обязательно", подразумевался запрос ко всем данным таблицы. Запросы к одной записи всегда отрабатывают быстро, если их не слишком много, говорить об эффективности подхода применительно к таковым смысла мало. Соглашусь, к сожалению я небрежен в нашем разговоре. Прощу простить за это, к сожалению много отвлекающих факторов. stenfНапример мне кажется логичным высказываение одного из "столпов" (не помню какого), что если-уж применять их, то в случаях, когда в текущий момент времени значение поля неизвестно, но обязательно появиться в будущем. Cтранный подход, признаться. Не знаю, как и в каком контексте было сформулировано в оригинале, но в таком изложении - не вижу цимеса. Скажем, как провести границу обязательного появления - через две недели, или допустим через двадцать лет? Например, рассмотрим поле "ИНН физического лица". Краткая справка: как правило, работающий человек получает ИНН и дальше до смерти с ним числится. Дети, пенсионеры и прочие никогда не работавшие как правило его не имеют. "Как правило" означает, что в обоих случаях есть исключения. Итого: как Вы предполагаете правильным хранить эти данные? Скажем, задача: хранить ФИО физ. лица, дату рождения и ИНН (прочие атрибуты для экономии времени опустим). Вопрос: как правильно хранить? stenfПерманентное-же существование null мне не кажется оправданным. Хм. Прежде всего мне в этом случае очень странно, что считанные письма назад Вы резко нападали на "временный null", срок жизни которого исчислялся микросекундами между выполнением нескольких операторов одной транзакции, а никто другой эти данные увидеть не мог (надеюсь, у вас в системе нет грязного чтения?) Сейчас же Вы уже примиряетесь с существованием временного null со сроком жизни в несколько недель, которым успеют воспользоваться все кому не лень. Честно говоря, это воззрение имхо показывает слабость Вашей идеологии. Почему: потому что все проблемы, которые только может доставить null, в случае "временных null" ничуть не менее страшны, нежели в случае "перманентных null". Разница между ними в лучшем случае количественная (количество бизнес-функций, работающих с "данными во временном состоянии" несколько меньше, нежели полное количество бизнес-функций системы, мест для ошибки соответственно меньше). Таким образом, получим, что есть некоторое количество временных null допустимо для системы объема X, такое же количество перманентных null вполне допустимо для системы объемом, скажем, 3*X ("вполне допустимо" означает в данном случае "доставляет не больше проблем, чем"). В целом, начиная с этого момента складывается впечатление: null отторгается по религиозным мотивам, "временные null" - некий компромисс между реальной потребностью в них и нежеланием окончательно признать их уместность на своем месте. stenfвот как раз вы и показали мне пример хакерства в базе - грубое нарушение заложенных в нее принципов. Вы совершенно наивно полагаете, что знаете, какие принципы были заложены в базу, и что является их грубым нарушением. Это смело, но.. неразумно. Я, например - не знаю, что там было изначально, какие принципы закладывались и какую задачу решили именно таким способом. Опять же, Вы сугубо религиозно выступаете - "я знаю как надо, все что противоречит, является грубым хакерством, все что соответствует - нормально". Что замечательно, Вы при этом даже не имеете представления о предметной области той задачи, в которой было принято такое решение. stenfНапример я, если какой-нибудь умник при сопровождении моей системы, для обхода логической проблемы оторвет детали от ссылок на изделия и напортачит с данными - сначала заставлю вернуть все на свои места, а уж затем исправлять проблемы Правильно. А вот почему-то "умником, который хочет для обхода логической проблемы разрушить баланс и напортачить с данными" - Вы готовы выступить, во всяком случае, привели такой пример и считаете его правильным. stenf softwarer Вы, пардон, сказали не самую разумную вещь - "необходимо, чтобы абстракция казалась очевидной". Я привел Вам пример общеизвестной и общеиспользуемой абстракции, очевидной не являющейся. Если это для Вас парадокс - хорошо. Теперь следует правильно его оценить и уточнить теорию, на основании которой Вы в этот парадокс вляпались Раз уж цитируете, то цитируйте до конца - "необходимо, чтобы абстракция казалась очевидной и другим людям " Хм. Раз уж упрекайте, включайте логику. Кто у нас есть из "не других людей"? Автору абстракции - она как правило очевидна, или во всяком случае хорошо понятна, о нем речь не идет. Есть другие люди. Еще есть бог, марсиане и морские свинки; когда мы говорим о проектировании БД, эти категории "прочих" неинтересны и не обсуждаются. Кто еще есть кроме "других людей", кому "должно быть очевидно"? Таким образом, я не убрал из Вашей цитаты ничего значимого. stenf;) Откуда у вас такая уверенность, кто из нас вляпался ? Вкратце уже объяснено в том, на что Вы отвечаете. Ваше утверждение противоречит практике, причем не довольно абстрактным рассуждениям о глобальных тенденциях, но практике, существовавшей задолго до программирования и процветающей до сих пор. Таким образом, чтобы обосновать свое утверждение, Вам придется пояснить, чем эта практика не верна, и самое главное - как сделать лучше. Как я уже сказал, тысячи присутствующих здесь с громадным интересом выслушают толковые предложения. Но пока Вы их не выдвинули - я буду пребывать в уверенности, что Вы таки вляпались. stenfПриведу еще одну цитату: "Метафоры имеют одно неоспоримое достоинство - описываемое ими поведение предсказуемо и понятно всем людям. Ха-ха-ха. Это далеко не всегда верно даже в случае таких очевидных и проработанных метафор, как элементы пользовательского интерфейса. Это идеальная ситуация, к которой нужно стремиться, но которую в случае "всех людей" совершенно невозможно достичь. stenfВаш розовый слон в общем случае не обладает предсказуемым (с точки зрения других людей) поведением, и не сокращает объем коммуникации. Прямо скажем, все как раз наоборот. "Мой розовый слон" обладает одним ключевым свойством, а именно "удобен для описания предметной области", если я правильно помню собственную цитату. Таким образом, он сокращает объем коммуникации между членами проектной команды и обладает предсказуемым с их точки зрения поведением. "Другие люди, не являющиеся членами проектной команды", проекту совершенно неинтересны. Если Вася Пупкин, сварщик из Воркуты, не ориентируется в моих розовых слонах - никому от того не холодно и не жарко. Вот Вы же - не знаете, что такое проводка? Но мир от того не рушится. Если когда-нибудь придете работать туда, где используется эта абстракция - узнаете. Когда Вы придете работать с проводками - Вам потребуется обучение. Собственно, вполне стандартная практика, реализуемая в разных местах по-разному, начиная с простого рассказа "что у нас и как", через проработанную документацию и вплоть до специальных тренингов. Кстати, потребовалось бы и без розовых слонов - объем "входной информации" достаточно велик в любом случае. Разумеется, очевидность той или иной метафоры является ее достоинством. Не всегда достижимым достоинством. Однако, при выборе "один раз научить принятого на работу человека неочевидной метафоре" либо "всем каждый день работать с неудобными метафорами" разумные люди выбирают первый путь. stenfК примеру, я могу думать, что розовый слон розовый, потому-что чем-то болеет и его надо отвести к ветеринару, К примеру, если Вы не хотите понять, что "розовый слон" - некая метафора уровня уже нашего разговора, нам придется констатировать невозможность конструктивной беседы. stenf softwarer Если Вы считаете, что проводки - это "удалять гланды через задницу", я уверен, тысячи присутствующих здесь с громадным удовольствием выслушают рассказ о превосходящих альтернативных решениях ну и напрасно вы тут так злорадничаете, я понятия не имею что такое проводка. Тогда Вы неэтично поступили выше, там, где пассаж про литературную критику. Там у Вас есть критика "не разбирающихся"; сейчас же Вы ткнули в предмет, в котором "понятия не имеете" и сказали "гланды через задницу". То есть Вы требуете от других одной модели поведения, а сами пользуетесь другой, противоречащей. stenfВы сами сказали, что эта абстракция неочевидна. Однако если вы хотите этим оправдать появление на свет вашего еще менее очевидного слона - то вы на неверном пути Хм. Еще раз, медленно и печально: "проводка", "нулевая сборка", "аналитический счет", "поле комплексных чисел" и мириады других неочевидных абстракций - примеры "розовых слонов", которые появляются потому, что удобны для решения той или иной задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 16:56 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
softwarer Так. Упрощают. … Я не готов оценивать фразу, не зная подразумеваемого для нее контекста. К. Дилейни The issue of whether to allow NULL has become an almost religious one for many in the industry, and no doubt the discussion here will outrage a few people. However, my intention isn't to engage in a philosophical debate. Pragmatically, dealing with NULL brings added complexity to the storage engine because SQL Server keeps a special bitmap in every row to indicate which nullable columns actually are NULL. If NULLs are allowed, SQL Server must decode this bitmap for every row accessed. Allowing NULL also adds complexity in application code, which can often lead to bugs. You must always add special logic to account for the case of NULL. … As you know, I strongly recommend that you minimize the use of NULL. In outer-join operations, you should carefully account for NULL values that are generated to preserve rows that don't have a match in the table being joined. And even if you're comfortable with three-valued logic, your developers and anyone querying the data using the SQL language typically won't be; therefore, introducing NULL will be a source of bugs just waiting to happen. softwarer Хм. Скажите, а Вас не затруднит приводить кого-нибудь кроме MSSQL-щиков? Дейт не MSSQL-щик. Хотя нет, я забыл, он-же тоже не годиться так как. теоретик. Какая досада. Какой барьер для цититат вы выставите в следующий раз ? Что-бы автор имел московскую прописку ? softwarer Вы пересказали банальность из книги 8-/ Какой книги, вы о чем вообще ? Бред какой-то. Я попросил-бы вас не бросаться высосанными из пальца догадками, да еще таким тоном. Когда я кого-то цитирую, я это явно указываю. softwarer Дружище, если из всего многообразия "иди куда нужно" Вы видите одно-единственное направление движения - это шоры Вашего мышления, ничего более. И в строгом соответствии с предыдущей ссылкой выдаете это как "мне сказали именно это". знаете, не вы один обладаете здравым смыслом и способностью к логическим выводам. Я уверен, что мой вывод из тех цитат вполне обоснован. Если вы с этим не согласны - ваше право, спорить и обсуждать вашу логику не буду. softwarer Это для любого количества строк является каплей в море Тут пока не готов дискутировать. Выяснение того, какой реальный процент ресурсов потребляет отслеживание null требует некоторого исследования. Все-таки движок сервера написан не на ассемблере (хотя возможно имеются значительные ассемблерные вставки), и операция проверки на null не обязательно сведется буквально к 2 ассемблерным операциям (не зная внутренностей никогда ничего нельзя гарантировать). softwarer Разница лишь в том, что для некоего "разумного количества строк", например до 10.000.000, это будет "капля в море вообще, в абсолютных числах", а для большего количества - "капля в море относительно других операций, которые придется провести с теми же данными". Вы не находите, что есть некоторая разница между каплей любого размера и нулем ? softwarer То есть, если я Вас правильно понял, ваше приложение чихает на понятие "согласованность данных"? И если вдруг меняются параметры изделия, Вы подходите к мегафону и громко-громко-громко говорите "Всем пользователям системы перевойти в нее"? Чихаем на согласованность ? Это почему интересно ? Судя по реплике про мегафон, вы хотели сказать что-то про неактуальность данных. Никто (кроме здравого смысла) вообще-то и не мешает добавить кнопку refresh на список изделий, только поверьте, необходимости в этом нет. Список изделий редактируется от силы раз в месяц. Да и то это будет иметь значение только для добавления/удаления изделий, а никак не при редактировании их свойств. softwarer Оптимизация - такая вещь, что … Вообще-то при проектировании структуры базы мысль об оптимизации не должна находиться на первом месте (правда и не на последнем). Та-же денормализация не производиться заранее, а только при неудовлетворительной пропускной способности системы (и то не всегда), а решение использовать/неиспользовать null в общем случае относиться в первую очередь к структурным вопросам, а не к оптимизационным. Это кстати является аргументом против применения null “потому-что это быстрее”. Уж лучше иметь менее быстродействующую систему, чем систему более склонную к ошибкам. (вернее сказать - выискивать другие методы оптимизации) softwarer могу ошибиться, но мне кажется, Вы в своем рассуждении проглядели одну маленькую подробность. Если типичный запрос не пользуется данными пристыковочной таблицы, в случае одной таблицы он также не будет лезть "декодировать маску" для этих данных и соответственно не будет тратить на это ресурсы Подробности об изделии закачиваются один раз и на это требуется join. Другие запросы обходяться без join’а, но все равно потребляют столбец, который будет иметь null в случае отказа от третьей таблицы. softwarer Этого, пардон, я совершенно не понял. Собственно, сама по себе фраза coalesce(IDИзделия, IDДетали) говорит о кривой структуре данных (несравнимые вещи сводятся под одной крышей). О какой структуре данных идет речь? К сожалению, я не имею представления, что такое "нулевая сборка", но в любом случае прежде всего - нарисуйте, пожалуйста, какую структуру Вы сравниваете, и с какой. я-же написал, что речь идет о моем примере в данном топике. “Кривой “ структурой данных является предложение ModelR’a, которое я кстати предлагал вам критиковать еще на первой странице топика. Код: plaintext 1. 2. В данном случае предлагается в таблице Изделия в качестве IDИзделия применить значение IDДетали нулевой сборки (то есть такой сборки, которая и представляет собой собственно само изделие). А в таблице Детали для этой сборки в поле IDИзделия проставить null, так как IDДетали и будет являться ссылкой на изделие. Теперь, при запросе всех деталей изделия необходимо применение например coalesce, что-бы получить резалтсет с нулевой сборкой (т.е. при IDИзделия is null необходимо брать IDДетали). softwarer Cтранный подход, признаться. Не знаю, как и в каком контексте было сформулировано в оригинале, но в таком изложении - не вижу цимеса. Скажем, как провести границу обязательного появления - через две недели, или допустим через двадцать лет? Что-же в этом странного, обязательное появление означает что запись рано или поздно там появиться, и не важно, через 1 день или 20 лет. softwarer Скажем, задача: хранить ФИО физ. лица, дату рождения и ИНН (прочие атрибуты для экономии времени опустим). Вопрос: как правильно хранить? В связи с тем, что по условию задачи есть люди, которые по определению не могут иметь ИНН, я-бы разнес их в разные таблицы, что-бы не допустить появления младенца, обладающего ИНН. Хотя уверен, что в реальности они все в одной таблице, потому-что так “проще” ;) softwarer Хм. Прежде всего мне в этом случае очень странно, что считанные письма назад Вы резко нападали на "временный null", срок жизни которого исчислялся микросекундами между выполнением нескольких операторов одной транзакции, а никто другой эти данные увидеть не мог (надеюсь, у вас в системе нет грязного чтения?) Сейчас же Вы уже примиряетесь с существованием временного null со сроком жизни в несколько недель, которым успеют воспользоваться все кому не лень. Неужели не догадываетесь, что принципиальная разница между “null которого никто не видит” и “null доступный для всех” в том, что в первом случае sql-код для работы с базой должен учитывать возможность появления null в данных, а во втором – нет ? softwarer Почему: потому что все проблемы, которые только может доставить null, в случае "временных null" ничуть не менее страшны, нежели в случае "перманентных null". Перманентный null имеет одну серьезную связанную с ним проблему – если там вдруг случайно появляется значение, то это может нарушить всю логику и привести например к появлению изделия у изделия, чего никак не может быть. softwarer Вы совершенно наивно полагаете, что знаете, какие принципы были заложены в базу, и что является их грубым нарушением. Согласен, это было всего лишь мое предположение, хотя и вполне логичное softwarer А вот почему-то "умником, который хочет для обхода логической проблемы разрушить баланс и напортачить с данными" - Вы готовы выступить Я вам уже не раз повторял, что там был пример, демонстрирующий разницу между разными видами бизнес-правил: реальности и бизнеса. Никаким хакерством я не собирался там заниматься. softwarer Хм. Раз уж упрекайте, включайте логику. Кто у нас есть из "не других людей"? А вы иногда отключайте логику и включайте здравый смысл. Абстракция может быть очевидной для вас, но не для других людей. softwarer Еще раз, медленно и печально: "проводка", "нулевая сборка", "аналитический счет", "поле комплексных чисел" и мириады других неочевидных абстракций ага, я кажется начинаю понимать причины ваших ответов. Вы смешиваете понятия "метафора/абстракция" и "термин предметной области". Нулевая сборка не является метафорой - это термин. Как и аналитический счет. Метафорой для нулевой сборки будет например "девушка на выданье" (прошу ее не критиковать, метафора идиотская и не совсем к месту, но я не могу так вот сразу придумать что-то получше, но зато она демонстрирует идею). Такая метафора (кстати понятная всем) вызывает в сознании определенные образы нечто такого, что долго взращивали и можно наконец отдать в чужие руки. С другой стороны я допускаю, что понятия "термин" и "метафора" могут иногда пересекаться, что облегчает понимание. энциклопедия МЕТАФОРА (от греч. metaphora перенесение), троп, перенесение свойств одного предмета (явления) на другой на основании признака, общего или сходного для обоих сопоставляемых членов («говор волн», «бронза мускулов»). ТЕРМИН (от лат. terminus граница, предел), слово или сочетание слов, обозначающее специальное понятие, употребляемое в науке, технике, искусстве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 18:46 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
У меня складывается ощущение, что автор топика не имеет представления о предметной области, для которой он пытается разрабатывать систему учета. 2 stenf: Вы уж разберитесь, что такое деталь, сборочная единица, сборка СБ000 и чем она отличается от изделия, что такое технология изготовления и как она соотносится с конструкторской документацией, заодно почитайте что-нибудь на предмет организации складского учета, что такое готовая продукция и сопроводительные документы на партию изделий и т.п. А самое правильное - прислушайтесь к совету от guest_20040621 или обратитесь к компаниям, которые профессионально занимаются разработкой информационных систем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 19:04 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
Мишка Зина внесла индейку. Борменталь налил Филиппу Филипповичу красного вина и предложил Шарикову. - Я не хочу. Я лучше водочки выпью. - Лицо его замаслилось, на лбу проступил пот, он повеселел. И Филипп Филиппович несколько подобрел после вина. Его глаза прояснились, он благосклоннее поглядывал на Шарикова, черная голова которого в салфетке сияла, как муха в сметане. Борменталь же, подкрепившись, обнаружил склонность к деятельности. - Ну-с, что же мы с вами предпримем сегодня вечером? - Осведомился он у Шарикова. Тот поморгал глазами, ответил: - В цирк пойдем, лучше всего. - Каждый день в цирк, - благодушно заметил Филипп Филиппович, - это довольно скучно, по-моему. Я бы на вашем месте хоть раз в театр сходил. - В театр я не пойду, - неприязненно отозвался Шариков и перекосил рот. - Икание за столом отбивает у других аппетит, - машинально сообщил Борменталь. - Вы меня извините... Почему, собственно, вам не нравится театр? Шариков посмотрел в пустую рюмку как в бинокль, подумал и оттопырил губы. - Да дурака валяние... Разговаривают, разговаривают... Контрреволюция одна. Филипп Филиппович откинулся на готическую спинку и захохотал так, что во рту у него засверкал золотой частокол. Борменталь только повертел головою. - Вы бы почитали что-нибудь, - предложил он, - а то, знаете ли... - Уж и так читаю, читаю... - Ответил Шариков и вдруг хищно и быстро налил себе пол стакана водки. - Зина, - тревожно закричал Филипп Филиппович, - убирайте, детка, водку, больше уже не нужна. Что же вы читаете? В голове у него вдруг мелькнула картина: необитаемый остров, пальма, человек в звериной шкуре и колпаке. "Надо будет Робинзона"... - Эту... Как ее... Переписку Энгельса с этим... Как его - дьявола - с Каутским. Борменталь остановил на полдороге вилку с куском белого мяса, а Филипп Филиппович расплескал вино. Шариков в это время изловчился и проглотил водку. Филипп Филиппович локти положил на стол, вгляделся в Шарикова и спросил: - Позвольте узнать, что вы можете сказать по поводу прочитанного. Шариков пожал плечами. - Да не согласен я. - С кем? С Энгельсом или с Каутским? - С обоими, - ответил Шариков. - Это замечательно, клянусь богом. "Всех, кто скажет, что другая..." А что бы вы со своей стороны могли предложить? - Да что тут предлагать?.. А то пишут, пишут... Конгресс, немцы какие-то... Голова пухнет. Взять все, да и поделить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 19:26 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
авторУ меня складывается ощущение, что автор топика не имеет представления о предметной области, для которой он пытается разрабатывать систему учета. более отчетливое ощущение, что автор начитался книжек, и с разбегу начал практиковаться. Вот и все. Т.е. просто перегрузился теорией, вместо того чтобы плавно теорию с практикой чередовать. Конечно, если прочитать на ночь Дейта, главу Отсутствующая информация, то оно, может быть, ночью приснится null, грызущий ноги. Однако, практика как раз говорит о том, что не надо возводить теорию в догму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 19:30 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfя-же написал, что речь идет о моем примере в данном топике. “Кривой “ структурой данных является предложение ModelR’a, которое я кстати предлагал вам критиковать еще на первой странице топика. Код: plaintext 1. 2. В данном случае предлагается в таблице Изделия в качестве IDИзделия применить значение IDДетали нулевой сборки (то есть такой сборки, которая и представляет собой собственно само изделие). А в таблице Детали для этой сборки в поле IDИзделия проставить null, так как IDДетали и будет являться ссылкой на изделие. Теперь, при запросе всех деталей изделия необходимо применение например coalesce, что-бы получить резалтсет с нулевой сборкой (т.е. при IDИзделия is null необходимо брать IDДетали). Однако 3 (три) раза пытался обратить ваше внимание на непонятный атрибут Детали.IDИзделия. Лишний он однако. З.Ы. Вместо перебранки с softwarer привели бы пример данных. З.З.Ы. Согласно традициям sql.ru для флейма отведен Сравнение СУБД :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 19:35 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
kdv Конечно, если прочитать на ночь Дейта, главу Отсутствующая информация, то оно, может быть, ночью приснится null, грызущий ноги. Однако, практика как раз говорит о том, что не надо возводить теорию в догму. если-бы я был экспертом в теории и практике, то не сидел-бы тут на форуме спрашивая возможно глупые вопросы. Однако вместо того чтобы критиковать меня, лучше-бы критиковали мои мысли, а просто растекание мысли по дереву о том какой я дурак имеет мало смысла, и может подтолкнуть к мысли, что вы и сами не сильно глубоко разбираетесь в этом вопросе ModelR Однако 3 (три) раза пытался обратить ваше внимание на непонятный атрибут Детали.IDИзделия. Лишний он однако. хорошо, тогда скажите, каким образом надо выстроить схему по-другому, но так, что-бы я мог запросом отобрать только детали определенного изделия. ModelR Вместо перебранки с softwarer привели бы пример данных. каких данных ? Да и не перебранка это ни какая :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 10:39 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfтогда скажите, каким образом надо выстроить схему по-другому, но так, что-бы я мог запросом отобрать только детали определенного изделия. Вот видите, даже в самом Вашем вопросе ошибка. Деталь не принадлежит изделию. Она может использоваться в его сборке, и не более. А может использоваться и при сборке более чем одного изделия. Вообще, запомните, сейчас для Вас деталь и изделие - это одно и то же. Никаких параметров, связанных с поставщиками и наличием чертежей самой делтали, в BOM не бывает (а у Вас классический BOM), это свойство изделия/детали, а не сборки, а Вам надо описать именно сборку . Простейшая реализация BOM такая. Есть заголовок, в котором указывается номенклатура (изделие). Есть состав, который ссылается на заголовок, в котором указываются номенклатуры (детали), из которых делается данное изделие. Одно изделие может иметь много рецептов производства, одна номенклатура может использоваться для производства много чего, потому никакой уникаьности здесь по номенклатуре нет. Ссылки из BOM делаются именно на справочник номенклатуры, а не изделий и деталей. Все прочие вещи (справочник номенклатур, единиц измерения, что вообще считать материалами и изделиями, и прочее, атрибуты этих справочников) должны жить отдельно и сюда их совать не надо. А получение перечня деталей, требующихся для сборки - отдельная тема. Потому что одна и та же деталь может как производиться (причем разными способами, из разных полуфабрикатов и т.п.), так и покупаться. Потому видимо все, что Вы сможете сделать при такой постановке вопроса - это максимально развернуть BOM-ы рекурсивно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34239159&tid=1544780]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 485ms |

| 0 / 0 |
