|
|
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
iscrafm Хочется понять, почему типовые варианты BOM Вас не устраивают что такое ВОМ и что там за типовые решения ? iscrafm описали Ваше решение какой-то задачи, а не саму задачу опять не слава богу. Как мне надо описать задачу, что-бы все всем стало понятно ? Мне непонятно, что может быть непонятного в деревянной структуре изделия, где все детали должны быть связаны с изделием, а само изделие - с нулевой сборкой. Это и есть постановка, а никак не решение задачи. ййййййй create table Детали(IDДетали int, характеристики ...) create table Изделия(IDИзделия int, характеристики ...) create table ИзделиеДеталь(IDИзделия int, IDДетали int) create table ДетальДеталь(IDДетали int, IDРодительскойДетали) дык это решение softwarer в последнем посте предложил, оговорившись, что это извращение ййййййй дядя, не обижайся! тебе рассказывают, рассказывают а ты цитируешь гегеля ... в следующий раз тебя могу начать цитировать, правда вытянуть что-то ценное из туманных тирад про пылесосновтягивающие машины, чертиков и гегеля будет сложновато... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 16:04 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
В терминах предметной области, IMHO, надо представить нечто, очень похожее на спецификации. Изделие кол-воСборочние единицыСБ 010 1СБ 020 1СБ 030 1Детали...Материалы... Каждая сборка, в свою очередь, состоит из сборочных единиц, деталей и материалов и КД на сборку включает в себя аналогичную спецификацию. Все это незамысловато описывается структурой вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Разумеется, что следует также предусмотреть понятия Исполнение и Вариант в виде атрибутов либо сущностей, также описывающих КД. stenf iscrafm Хочется понять, почему типовые варианты BOM Вас не устраивают что такое ВОМ и что там за типовые решения ?Bill Of Materials - спецификация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 18:01 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
2 !!! Дело в том, что наша система имеет направленность на производство изделий, а не на конструкторскую разработку, управлением конструкторской документацией занимаются PDM системы, например у Solid Works есть нечто подобное, в любом случае к нашей системе это не имеет отношения. Поэтому такие понятия как сохранение истории изменений входимости и варианты нас не волнуют, материалы учитываются, но на более поздней стадии (на основе входимости составляются так называемые производственные партии деталей, которые идут в запуск, на такую партию пишется технология и только на этом этапе прицепляется материал). В остальном ваша схема не отличается от моей. >>Bill Of Materials - спецификация и что там за типовые решения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 20:35 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenf >>Bill Of Materials - спецификация и что там за типовые решения ? Типовой BOM - это только ДВЕ таблицы: 1. Предметы (изделия, сборки, детали, материалы, комплектующие и т.д.) 2. Состав предметов (что, куда, скока) Почему так и никак иначе долго объяснять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 09:52 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
мод stenf >>Bill Of Materials - спецификация и что там за типовые решения ? Типовой BOM - это только ДВЕ таблицы: 1. Предметы (изделия, сборки, детали, материалы, комплектующие и т.д.) 2. Состав предметов (что, куда, скока) Почему так и никак иначе долго объяснять. в таком случае любые решения на такой основе не подойдут, хотя-бы потому, что материал в нашей системе не может цепляться на деталь/сборку из входимости, так как номенклатурный номер материала зависит от числа деталей запускаемых в производство, а это число может отличаться от того, что написано во входимости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 10:25 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenf мод stenf >>Bill Of Materials - спецификация и что там за типовые решения ? Типовой BOM - это только ДВЕ таблицы: 1. Предметы (изделия, сборки, детали, материалы, комплектующие и т.д.) 2. Состав предметов (что, куда, скока) Почему так и никак иначе долго объяснять. в таком случае любые решения на такой основе не подойдут, хотя-бы потому, что материал в нашей системе не может цепляться на деталь/сборку из входимости, так как номенклатурный номер материала зависит от числа деталей запускаемых в производство, а это число может отличаться от того, что написано во входимости Это вы сами себе вырыли яму... Получается, как в комедии "Недоросль":"...если дверь стоит, то она - имя существительное, а если лежит - то прилагательное..." По нормальному было бы обеспечить в системе: ID материала/полуфабриката/детали = номенклатурный № = ID (в конструкторской документации) = const ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 07:05 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfноменклатурный номер материала зависит от числа деталей запускаемых в производство При таком дезайне вам уже ничего не поможет, извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 10:02 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfв таком случае любые решения на такой основе не подойдут, хотя-бы потому, что материал в нашей системе не может цепляться на деталь/сборку из входимости, так как номенклатурный номер материала зависит от числа деталей запускаемых в производство, а это число может отличаться от того, что написано во входимостиИмеется ввиду, что типа если запускаемых деталей мало, то следует их нарезать из короткого прутка, а если много, то дОлжно брать длинный? Тогда одним BOMом не отделаешся, имеем уже варианты технологий, и варианты технологических норм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 10:52 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
варианты технологий в нашей системе есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 12:46 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfХорошо, открываем Кена Хендерсона Если честно, не в курсе кто это, а характеристика на основании быстрого поиска по гуглю вряд ли будет объективной. stenfВ поле IDИзделия таблицы Детали для нулевой сборки вставляю null. Oops. Мы же с этого начали - Вы начали отказываться от null, я начал показывать, что последствия будут хуже. Как только Вы решаетесь таки использовать null, все становится легко и просто. stenfУтрирование в данном случае - это применение нерелевантного сравнения. Вполне релевантное в рамках того, что я хочу объяснить. stenfЗачем приводить в пример нарушение логической целостности базы внутри транзакции и нарушение целостности, при котором в таблицу вставляются значения, которых там по бизнес правилам быть не должно, а вы просто договорились с сервером, что "ща погоди, следующий оператор все поставит на свои места" ? Потому что то и другое - нарушение целостности. Целостность не есть атрибут конкретного оператора, конкретной записи итп. Это атрибут базы в целом. В ходе транзакции допускается нарушение "целостности снапшота" с условием, что к концу транзакции целостность будет восстановлена. Скажем, я натыкался на случай, когда при складских операциях в промежуточном состоянии получались отрицательные остатки по складу. И в принципе ничего страшного - главное, что к концу операции их уже не было. Хотя это те самые "значения, которых не должно быть". stenfЕсть принципиальная разница между "списали с одного счета, а на другой зачислим следующим оператором" и "вставляем в поле ссылку на отсутствующий объект" Нет, ничуть, если "следующим оператором вставим объект, на который ссылаемся". stenfВообще я тут не критикую deffered constraints, просто применение этого "маленького чудовища" тоже бы неплохо ограничить действительно необходимыми случаями, а данный случай имхо не является таковым. deferred constraints - это действительно не то чтобы хорошая штука. Но лучше, чем их отсутствие :) В условиях задачи "без null" без них было не обойтись; с null они не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 13:15 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
Станислав С Это вы сами себе вырыли яму... Получается, как в комедии "Недоросль":"...если дверь стоит, то она - имя существительное, а если лежит - то прилагательное..." По нормальному было бы обеспечить в системе: ID материала/полуфабриката/детали = номенклатурный № = ID (в конструкторской документации) = const неверно. Номенклатурный номер - это совокупность материала и сортамента. Поэтому, если например требуется изготовить 1000 шайб, то конструктор не может выбрать номенклатурный номер, потому-что если вся тысяча пойдет на запуск, то потребуется (условно) полоса 100х200, а если запуск пойдет двумя партиями по 500 шт. - то их нарубят из листа 100х100. Конструктор не может обладать такой информацией. мод При таком дезайне вам уже ничего не поможет, извините вы путаете архитектуру и бизнес-правила :) softwarer Если честно, не в курсе кто это, а характеристика на основании быстрого поиска по гуглю вряд ли будет объективной. хм, ну тогда откройте Криса Дейта. Он выражается в том духе, что null - это вообще ошибочная концепция, и в формальной системе, к которой относится реляционная модель, она не должна применяться. Возможно и Дейт теоретик, однако вы уже впадаете в крайность, когда столько (известных) человек твердят о плохом влиянии null, то ваш опыт (говорящий о пользе null) в любом случае не может перевесить их. Как известно - истина в компромисе, и наверняка есть случаи, когда null полезны, однако очевидно, что такие случаи надо сводить к минимуму, а не плодить их, прикрываясь наивной концепцией что все теоретики - дураки и зануды, а вот практики - носители истины. По поводу всего остального - да, идея с null в поле IDИЗделия тоже не фонтан, но тем не менее лучше, чем null сразу в нескольких полях таблицы, или null в одной, с условием обязательного update, т.е. когда есть поле null, которое никогда не должно содержать null вне транзакции. Вообще, тут возможно лучше как раз "извращенный" способ с третьей таблицей, содержащей связи IDИзделия-IDНулевойСборки, но тут я готов пойти на компромис с совестью :) softwarer Потому что то и другое - нарушение целостности. Целостность не есть атрибут конкретного оператора, конкретной записи итп. Это атрибут базы в целом. В ходе транзакции допускается нарушение "целостности снапшота" с условием, что к концу транзакции целостность будет восстановлена. Да они похожи, как и велосипед похож на грузовик тем, что оба сделаны из металла, имеют колеса, служат для перевозки людей и грузов и управляются одним человеком. Разница (важная) в том, что нарушение внешнего ключа - это такое нарушение структурной целостности базы, при котором нарушается сама ее основа, заданная архитектором, в то время как временное несоответствие кредита/дебита - это проблема не структуры базы, а программ, которые с ней работают. Самой базе будет глубоко фиолетово, если на счет не поступят деньги, списанные с другого счета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2006, 16:28 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfНоменклатурный номер - это совокупность материала и сортамента. Поэтому, если например требуется изготовить 1000 шайб, то конструктор не может выбрать номенклатурный номер, потому-что если вся тысяча пойдет на запуск, то потребуется (условно) полоса 100х200, а если запуск пойдет двумя партиями по 500 шт. - то их нарубят из листа 100х100. Конструктор не может обладать такой информацией. Вы связываете ном. номер с партией. Не делайте этого и тогда не нужно будет его менять по каждому чиху. Конструктор может выбрать нн всегда, потому как это характеристика класса, а не его экземпляра. У Вас, похоже все наоборот реализовано, или хотите реализовать. Такую тактику предлагает BAAN, например, что не есть хорошо. Определитесь, что у Вас действительно является номенклатурой, а что конкретной партией, со своим размером, датой выпуска-запуска и т.п. Если у Вас все под заказ делается, то тогда вообще непонятно в чем проблема. Набирайте спецификацию из уникальных деталей (сборок), каждая из которых имеет свою уникальную спецификацию и т.д. и т.п. Опять же, двух таблиц достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 00:38 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfоднако вы уже впадаете в крайность, когда столько (известных) человек твердят о плохом влиянии null, то ваш опыт (говорящий о пользе null) в любом случае не может перевесить их. Хм. Видите ли в чем дело, я выдвигаю заведомо "умеренную" точку зрения (применять null там, где он нужен) против процитированных Вами заведомо "экстремальных". Мой опыт говорит не то чтобы о пользе null.... скорее, я видел и оценил вред, принесенный системе именно попыткой обойтись без null. Меня просто достало разгребать внесенные при этом ошибки и проблемы. null - это естественный, и самое главное, надежный (в отличие от альтернатив) способ выразить некоторые вполне естественные ситуации. stenfоднако очевидно, что такие случаи надо сводить к минимуму, а не плодить их stenf, Вас никто не призывает их плодить. Вы сами пришли к тому, что null здесь нужен, так нафига теперь придумывать за меня наивные концепции? stenfРазница (важная) в том, что нарушение внешнего ключа - это такое нарушение структурной целостности базы, при котором нарушается сама ее основа, заданная архитектором, в то время как временное несоответствие кредита/дебита - это проблема не структуры базы, а программ, которые с ней работают. Самой базе будет глубоко фиолетово, если на счет не поступят деньги, списанные с другого счета. А вот это, простите, глубочайшее и принципиальное заблуждение. Есть бизнес-правила. Например "каждая деталь должна принадлежать изделию" или "дебет должен сходиться с кредитом". Их можно считать условно равноправными, а если считать разновесными - веса определяются только бизнесом и ничем другим. Каждое из этих правил может контролироваться различными способами. Скажем, первое я могу контролировать триггером, писать код, а второе - через materialized view, без всякого кода. Внешний ключ - это механизм проверки бизнес-правил. Стандартное, удобное решение. Ничего более, никаких "структурной целостности основ". С практической точки зрения нарушение баланса может быть во всех отношениях гаже, нежели нарушение внешнего ключа, это зависит только от бизнеса, а не от того, какие проверки авторы СУБД предусмотрели, а какие нужно реализовывать руками. Сугубо технически я даже могу организовать ситуацию, при которой существует и активен внешний ключ, но в таблицах лежат нарушающие его данные. Хотя именно для внешних ключей смысла в этом пожалуй нет, это удобно для check и notnull constraint-ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 02:03 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
iscrafm Вы связываете ном. номер с партией. Не делайте этого и тогда не нужно будет его менять по каждому чиху Либо я не понял вас, либо вы не поняли меня. Номенклатурный номер - это не наше изобретение, он существует испокон веков и не нам менять эту концепцию. Этим номером является например "Труба 60 x 5 ГОСТ 8734-75 / В10 ГОСТ 8733-87" и "Уголок 75 x 50 x 8-В ГОСТ 8509-86 / Ст3 - сп2-св ГОСТ 535-88". С этими номерами работает отдел снабжения, бухгалтерия и пр. Т.е. он нужен, и именно в таком виде. Партию и ном.номер нельзя не связать, потому-что именно размеры партии определяют, какой номер выбрать. Возможно вы подумали, что номеклатурный номер как-то завязан на номенклатуру производимых товаров, это не так, этот номер лишь определяет материал и вид заготовки, которую отдел снабжения должен закупить для производства изделий. Т.е. например (условно) для производства шайб они должны будут закупить "Пластина 50 x 500 x 500 Ф-4, с.2 ТУ 6-05-810-88". Этот номенклатурный номер был выбран технологом, когда он писал технологию на партию шайб. softwarer против процитированных Вами заведомо "экстремальных". хех, я-же ваши примеры цитировал 8) softwarer скорее, я видел и оценил вред, принесенный системе именно попыткой обойтись без null. Меня просто достало разгребать внесенные при этом ошибки и проблемы. null - это естественный, и самое главное, надежный (в отличие от альтернатив) способ выразить некоторые вполне естественные ситуации. довольно странно вносить в систему, хоть даже и теоритечески, неверную концепцию null, только для того, что-бы уменьшить количество других ошибок. Если архитектор ошибается пытаясь обойтись без null, так он ошибется и с null, это не от применяемых концепций зависит, а от опыта проектирования. Вы, как человек обладающий хорошими знаниями и опытом в этой области, совершите меньше ошибок и без null, я и с null могу навносить туда жуков softwarer stenf, Вас никто не призывает их плодить. Вы сами пришли к тому, что null здесь нужен, так нафига теперь придумывать за меня наивные концепции? хм, несколько null-полей в таблице это называется не плодить ? Или это каким-то образом способно оградить меня от более серьезных ошибок ? softwarer А вот это, простите, глубочайшее и принципиальное заблуждение. Вы изо всех сил выпячиваете те их свойства, которые их обьединяют. Да, это все методы для проверки бизнес-правил. Тем не менее имхо разница есть. Вот смотрите. Есть положим система учета платежей за телефон. Она содержит данные о пользователе и данные о платежах и расходах. Очевидно, что данные о средствах должны быть связаны с конкретным человеком. Также мы должны позаботиться о том, что-бы не дать ему разговаривать забесплатно. Ни при каких условиях счет не может оказаться "подвешенным" в воздухе, т.е. не содержать ссылки на человека, которому он принадлежит. Это обеспечивается внешним ключом. Однако вполне может так оказаться, что являясь нашим лучшим клиентом, мы хотим подарить ему бесплатные минуты. Если при проектировании системы вы включили в систему проверку на соответствие прихода/расхода - то БД просто не даст нам совершить этот великодушный поступок. Уверен, что сейчас скажите, что тут всего-навсего имеет место быть промах в проектировании. Однако широко известно, что бизнес-правила могут (и будут) изменяться с ходом времени. Однако никакое бизнес-правило не может измениться так, что-бы счет оказался "в воздухе", так как это противоречит физической реальности. Грубо говоря, вы можете быть уверенным, что физическая реальность не является изменчивым бизнес-правилом и будет неизменна сколь угодно долго. Именно такие явления я называл "самой основой схемы БД". То, что не может изменяться. Никогда. Следовательно, разрешать даже временное отступление от этих правил по определению нехорошо, и заставит будущих программистов, которые будут сопровождать вашу систему, совершать лишние шевеления извилинами, пытаясь осознать почему ваша система так устроена. ----------------------------------------------------- Поздравляю всех с Новым Годом, желаю всего ! ----------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 09:52 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfесли например требуется изготовить 1000 шайб, то конструктор не может выбрать номенклатурный номер, потому-что если вся тысяча пойдет на запуск, то потребуется (условно) полоса 100х200, а если запуск пойдет двумя партиями по 500 шт. - то их нарубят из листа 100х100. Конструктор не может обладать такой информацией. нет у меня под рукой сейчас базы из металообработки, но на примере пищевки думаю тоже будет понятно о чем речь. Технолог использует в рецептуре Сметану, что из себя представляет Сметана - отчетливо видно на картинке ниже. У Вас ничем не отличается. Технолог использует в спецификации заготовку, к примеру толщиной 5 мм. Размер же листа не должен его волновать. Это уже атрибут партии материала, которая подбирается для изготовления детали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 11:46 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfхех, я-же ваши примеры цитировал 8) Really? :) stenfдовольно странно вносить в систему, хоть даже и теоритечески, неверную концепцию null, только для того, что-бы уменьшить количество других ошибок. Верное логически утверждение, но исходящее из неверной предпосылки. Концепция null не "неверна", она "гениальна". Другой вопрос, что как и реляционная теория вообще, для удачного применения она требует некоторого особенного понимания, взгляда на мир, некоего особого винтика в мозгу, который, к сожалению, некоторым просто не дан. Подумайте вот о чем. Я сходу нарисую Вам алгоритм "как от структуры с null перейти к эквивалентной без null". Такой же простой и строгий как алгоритмы нормализации. Но названные Вами джентльмены почему-то не обессмертили свое имя, публикуя этот алгоритм и позволяя обойтись вообще без единого null в базе. Как Вы думаете, почему? stenfВы, как человек обладающий хорошими знаниями и опытом в этой области, совершите меньше ошибок и без null, я и с null могу навносить туда жуков. Ээ... эта фраза наверное несколько неожиданно для Вас оказалась истинной. Она аналогична примерно следующему: "опытный гонщик и на запорожце опередит ламера на субару". :) stenfхм, несколько null-полей в таблице это называется не плодить ? Или это каким-то образом способно оградить меня от более серьезных ошибок ? Хм. Прежде всего, "несколько" - это довольно бессмысленная категория. С точки зрения "возможной опасности null" поля можно разделить на три категории: Участвующие во внешних ключах. "Неожиданный" null способен привести к пропаданию нужных строк из выборки. Участвующие в расчетах. "Неожиданный" null способен испортить результат какого-нибудь вычисления. Просто хранимые поля. null совершенно не страшен (до тех пор, пока на клиенте не применяется какой-нибудь тупой ORM, не решивший корректно вопрос работы с null-полями). Практически первая названная ситуация, пожалуй, наиболее тяжелая с точки зрения встречающихся последствий. Вторая выглядит куда гаже, но тут я позволю себе сослаться просто на свой опыт - такое встречается крайне редко, я пару раз встречал рассказы о таких ситуациях, а в личном опыте так по-моему ни разу. Скорее всего, дело в том, что такие ситуации в 99.9% случаев приводят к null-результату вычисления и ошибке cannot insert null into not-null field, то есть отлавливаются сразу и не приводя к существенным проблемам. stenfВы изо всех сил выпячиваете те их свойства, которые их обьединяют. Да, именно так. stenfВот смотрите. Есть положим система учета платежей за телефон. ..... Хм. Как раз в той "системе без null", с которой пришлось возиться, я в какой-то момент обнаружил около 50.000 записей "банковских счетов", не привязанных к банкам. Как потом выяснилось, с этими данными была какая-то проблема при импорте, их криво затянули, в итоге они были привязаны к "неизвестному банку" - и как ни странно, никаких проблем это не доставляло. Я обнаружил это уже на этапе "любознательности", когда исправив явные проблемы, рыл базу в поисках потенциальных. stenfОднако вполне может так оказаться, что являясь нашим лучшим клиентом, мы хотим подарить ему бесплатные минуты. Если мы хотим подарить бесплатные минуты, это должно быть учтено в структуре БД. Если мы начинаем корежить данные с целью добиться нужного результата, это не "безобидная шалость", а "одна из самых больших проблем, какие только можно создать". stenfОднако никакое бизнес-правило не может измениться так, что-бы счет оказался "в воздухе", так как это противоречит физической реальности. Смотря что Вы называете "в воздухе". Если "ссылающийся на отсутствующую запись", это конечно плохо, потому что правильнее сделать ссылку на null. Счет "неизвестно для кого" не есть хорошо, но может потребоваться, когда выставляется он таки действительно неизвестно на кого. Зачем такой? Cкажем, для того, чтобы бухгалтерия принимала по нему решение, в то время как система не попыталась выставить счет на те же услуги в следующий раз. stenfГрубо говоря, вы можете быть уверенным, что физическая реальность не является изменчивым бизнес-правилом и будет неизменна сколь угодно долго. Cуществование "физической реальности" - это тоже заблужение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 12:08 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
> Как быть ? Классический BOL. Нужна дополнительная типизация - ну так и заведите типы и маски. Вообще, судя по "create table изделия(IDИзделия int, Заказчик varchar(100), IDДетали int, СрокСдачи datetime, Примечание varchar(100))", Вы занимаетесь не своей работой: изделие не может быть связано с заказчиком описанным образом. Это грубейшая ошибка. Hint: не читайте Celco. Вообще. Забудьте. Hint 2: Дейта мало пересказывать, его нужно понимать. Null плох тогда и только тогда, когда он может быть интерпретирован не однозначно. Во всех остальных случаях - это абсолютно нормальное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 15:25 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
Тьфу, блин. BOM, конечно. Сорри, уже начали праздновать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2006, 15:27 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
iscrafm Размер же листа не должен его волновать еще как волнует. Выбор листа полностью на совести технолога, потому-что иначе кто собственно будет этот лист выбирать ? softwarer Really? :) really-really :) softwarer Другой вопрос, что как и реляционная теория вообще, для удачного применения она требует некоторого особенного понимания, взгляда на мир, некоего особого винтика в мозгу, который, к сожалению, некоторым просто не дан. Вы так увлеклись рытьем ямы для меня, что сами в нее и свалились. Любая концепция, требующая особых винтиков в голове не должна применяться в программировании, потому-что это усложняет сопровождение программ и является потенциальным источником ошибок. Это как множественное наследование в ООП, может и хорошее изобретение, расширяющее возможности программиста, только вот например Steve McConnell (не дай бог скажите что теоретик) советует держаться подальше от такого счастья, ибо это неоправданно усложняет программы и напоминает "старинную цепную пилу с барахлящим мотором и не имеющей предохранителей". softwarer Но названные Вами джентльмены почему-то не обессмертили свое имя, публикуя этот алгоритм и позволяя обойтись вообще без единого null в базе. Как Вы думаете, почему? Откуда-же я знаю, наверно это их и стоит спросить. Собственно, может где-то это уже и опубликовано, если это является таким ценным алгоритмом softwarer Практически первая названная ситуация, пожалуй, наиболее тяжелая с точки зрения встречающихся последствий. Вторая выглядит куда гаже, но тут я позволю себе сослаться просто на свой опыт - такое встречается крайне редко, я пару раз встречал рассказы о таких ситуациях, а в личном опыте так по-моему ни разу. Скорее всего, дело в том, что такие ситуации в 99.9% случаев приводят к null-результату вычисления и ошибке cannot insert null into not-null field, то есть отлавливаются сразу и не приводя к существенным проблемам. Может это какой-то хитрый логический ход, но мне кажется странным агитирование за null при помощи демонстрации его недостатков. То, что проблемы появляются "крайне редко" и не приводят к "существенным проблемам" никак не может служит стимулом к их использованию. softwarer Как раз в той "системе без null", с которой пришлось возиться, я в какой-то момент обнаружил около 50.000 записей "банковских счетов", не привязанных к банкам. Как потом выяснилось, с этими данными была какая-то проблема при импорте, их криво затянули, в итоге они были привязаны к "неизвестному банку" Вот. Представляете теперь, какой кошмар мог-бы произойти, если-бы там еще и null были ? softwarer и как ни странно, никаких проблем это не доставляло Действительно странно. 500000 банковских счетов в воздухе и никаких проблем. Назовите пожалуйста имя банка, что-бы я не нес туда свои деньги :) softwarer Если мы хотим подарить бесплатные минуты, это должно быть учтено в структуре БД Вы не поняли мой пойнт. В первоначальных требованиях никаких бесплатных минут могло и не быть. softwarer Если мы начинаем корежить данные с целью добиться нужного результата, это не "безобидная шалость", а "одна из самых больших проблем, какие только можно создать". не понял, как корежить ? softwarer Счет "неизвестно для кого" не есть хорошо, но может потребоваться, когда выставляется он таки действительно неизвестно на кого. Я не знаком с разработкой систем для банков, но со стороны такое решение напоминает удаление гландов через задницу. Такие "хитрожопые" решения опять-таки усложняют сопровождение, что плохо по определению. В моей системе я не собираюсь допускать существование детали "подвешенной в воздухе". softwarer Cуществование "физической реальности" - это тоже заблужение :) ну надо-же во что-то верить, я предпочитаю верить в обьективную реальность вокруг меня :) guest_20040621 Вы занимаетесь не своей работой: изделие не может быть связано с заказчиком описанным образом у нас внутренний заказчик - само предприятие, так что поле заказчика скорее является некоторой разновидностью примечания. Ничего страшного в наличии такого атрибута у изделия нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 10:17 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenfreally-really :) Hmm.... Can you make тынц? stenfВы так увлеклись рытьем ямы для меня, что сами в нее и свалились. Любая концепция, требующая особых винтиков в голове не должна применяться в программировании, Значит, RDBMS и SQL не должны применяться в программировании. Сказанное мной - не моя придумка, а широко известный факт. Есть люди, которые просто не понимают декларативного подхода, которые способны, например, написать примерно следующий код и считать его правильным: Код: plaintext 1. 2. stenfпотому-что это усложняет сопровождение программ и является потенциальным источником ошибок. Это как множественное наследование в ООП, может и хорошее изобретение, расширяющее возможности программиста, только вот например Steve McConnell (не дай бог скажите что теоретик) советует держаться подальше от такого счастья, Ага. Стандартный подход программиста на Visual Basic. Но лично мне ближе мнение Джоэля. Куда проще проверить, способен ли человек работать с указателями (тоже одна из концепций, требующих винтиков в голове) и не брать тех, кто не способен. stenfОткуда-же я знаю, наверно это их и стоит спросить. Собственно, может где-то это уже и опубликовано, если это является таким ценным алгоритмом Ну спросите. Я же почему-то думаю, что ценным алгоритмом это не является :) stenfМожет это какой-то хитрый логический ход, но мне кажется странным агитирование за null при помощи демонстрации его недостатков. Я не агитирую. Я "рассказываю как есть", и преимущества, и недостатки, а право идти мимо брода и тонуть полагаю Вашим и неотъемлимым. stenfВот. Представляете теперь, какой кошмар мог-бы произойти, если-бы там еще и null были ? Наоборот. Если бы там были null, этих 50.000 левых записей просто не было бы. Они висели исключительно для того, чтобы внешние ключи куда-то ссылались. stenf softwarer Если мы хотим подарить бесплатные минуты, это должно быть учтено в структуре БД Вы не поняли мой пойнт. В первоначальных требованиях никаких бесплатных минут могло и не быть. Это Вы не поняли, что я Вам сказал. Если в первоначальных требованиях бесплатных минут нет, а теперь они появляются, их надо адекватным образом встроить в структуру БД. В том числе в бизнес-правила. А любого, кто попробует как предлагаете Вы, "вот здесь хакнем данные, и ничего страшного не случится" следует распять на двери отдела тестирования. stenf softwarer Если мы начинаем корежить данные с целью добиться нужного результата, это не "безобидная шалость", а "одна из самых больших проблем, какие только можно создать". не понял, как корежить ? Так, как Вы предлагаете. Вольный пересказ Вашего предложения: "есть система, где дебет сходится с кредитом и нет бесплатных минут. Мы хакаем данные, добавляя бесплатные минуты, а то что дебит при этом разойдется с кредитом так нестрашно". stenfЯ не знаком с разработкой систем для банков, При чем тут банки? Счет в данном контексте - это такой документ, который выставляется покупателю товаров или услуг. stenfно со стороны такое решение напоминает удаление гландов через задницу. Такие "хитрожопые" решения опять-таки усложняют сопровождение, что плохо по определению. В моей системе я не собираюсь допускать существование детали "подвешенной в воздухе". Безусловно, плохо. И я упомянул это только для того, чтобы объяснить: даже в плохих ситуациях система при этом выживает. Вы изначально хотели вещь куда хуже. Зацикливание. Могу повторить еще раз: как только Вы согласились отказаться от нее и ввести null, вся эта ветка теряет особый смысл. stenf softwarerCуществование "физической реальности" - это тоже заблужение :) ну надо-же во что-то верить, я предпочитаю верить в обьективную реальность вокруг меня :) Видите ли в чем фокус, объективная реальность вокруг Вас не то чтобы однозначно связана с тем, что Вы проектируете. Вы проектируете виртуальный мир, и как он отображается на реальный и наоборот - вопрос Вашего выбора, ничего более. Как я люблю говорить, если с точки зрения предметной области удобно пользоваться абстракцией "пьяный розовый слон" - надо ввести соответствующую сущность, хотя в реальном мире такие особо не встречаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 11:53 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
> Ничего страшного в наличии такого атрибута у изделия нет Я Вам русским по белому написал: это ошибка. У изделия нет и не может быть такого атрибута. Ни в виде примечания, ни в каком-либо другом виде, ни для "внутреннего" заказчика, ни для какого-то еще. В общем, резюме: воспользуйтесь разделом "работа" и наймите нормального архитектора. Он разжует Вам, что такое BOM и как он реализовывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2007, 15:18 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Я Вам русским по белому написал: это ошибка. У изделия нет и не может быть такого атрибута. в таком случае для начала напишите что вы понимаете под заказчиком и где он должен находиться softwarer Can you make тынц? похоже под "цитированием" вы имели ввиду Дейта&Co., в том абзаце помимо Дейта были также цитаты ваших предложений softwarer Значит, RDBMS и SQL не должны применяться в программировании. Сказанное мной - не моя придумка, а широко известный факт. Есть люди, которые просто не понимают декларативного подхода смешно, но вы сейчас чуть не слово в слово цитируете так не любимого вами Джо Селко. Обвинения программистов в попытках, при программировании на SQL, мыслить в процедурных или объектно-ориентированных терминах вместо декларативных является его любимой фишкой. Однако мой пост был направлен на вашу идею о спецвинтиках в голове для использования null softwarer Ага. Стандартный подход программиста на Visual Basic. Но лично мне ближе мнение Джоэля. Куда проще проверить, способен ли человек работать с указателями (тоже одна из концепций, требующих винтиков в голове) и не брать тех, кто не способен. поздравляю, вы движитесь против основных течений в современном программировании. Если вы вдруг не в курсе, программы в общем случае не должны содержать нестандартных ходов и решений, а концепция любимых вами указателей как таковых и вообще убрана к примеру из .NET, ибо они привносит массу проблем. softwarer Я не агитирую. Я "рассказываю как есть", и преимущества, и недостатки, а право идти мимо брода и тонуть полагаю Вашим и неотъемлимым. пока что, вы четко указали только их недостатки, а про достоинства написали какие-то туманные мысли, что "на практике без них жутко неудобно". softwarer Вольный пересказ Вашего предложения: "есть система, где дебет сходится с кредитом и нет бесплатных минут. Мы хакаем данные, добавляя бесплатные минуты, а то что дебит при этом разойдется с кредитом так нестрашно Can you make тынц? (C) на подобные мои высказывания ? Особливо про "хакнуть данные" please. Даже в страшном сне мне не могла приснится такая интерпретация моих постов softwarer Вы изначально хотели вещь куда хуже. Зацикливание. нэправда. Ничего подобного я не хотел. Я показал проблему спросил, как именно с ней лучше поступить. softwarer Видите ли в чем фокус, объективная реальность вокруг Вас не то чтобы однозначно связана с тем, что Вы проектируете. Вы проектируете виртуальный мир, и как он отображается на реальный и наоборот - вопрос Вашего выбора, ничего более. Как я люблю говорить, если с точки зрения предметной области удобно пользоваться абстракцией "пьяный розовый слон" - надо ввести соответствующую сущность, хотя в реальном мире такие особо не встречаются. тут есть важная оговорка, в связи с тем, что сопровождать пьяного розового слона придется другим программистам, необходимо что-бы всем остальным такая абстракция тоже казалась очевидной, иначе вы достигаете прямо противоположного эффекта. А так как такие слоны в реальном мире не водяться, то у разных людей будет свое представление о розовых слонах и их повадках, и следовательно в первом приближении такая абстракция не то, что-бы хорошая идея. Хотя теоретически любая метафора способна помочь, надо все-таки... поаккуратнее что-ли быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2007, 10:25 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
stenf iscrafm Размер же листа не должен его волновать еще как волнует. Выбор листа полностью на совести технолога, потому-что иначе кто собственно будет этот лист выбирать ? технолог. только не на этом этапе. Вы про уникальное производство что-ли говорите, когда каждый заказ уникальный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2007, 19:47 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
iscrafm технолог. только не на этом этапе. Технолог выбирает лист на этапе написания технологии. На этом этапе он уже знает, в каком количестве партия идет в запуск, так что лист уже выбрать может. Правда есть определенный процент исключений, когда для ускорения процесса технологам отдают чертежи, еще точно не определившись с количеством в партии. В таком случае, если количество в партии позже меняется, то написанная технология просто "отцепляется", переходя в разряд неиспользуемых, что заставляет технолога как минимум пересмотреть технологию на необходимость внесения изменений. iscrafm Вы про уникальное производство что-ли говорите, когда каждый заказ уникальный? да, каждый заказ уникален, опытное производство. Т.е. конечно вполне может быть, что в запуск идет сразу несколько экземпляров изделия, но они все равно в системе должны считаться уникальными, потому-что в любой момент у одного из изделий могут провести изменения, и это не должно касаться остальных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2007, 07:11 |
|
||
|
Ловушка 22
|
|||
|---|---|---|---|
|
#18+
Кстати, ища материал для тынца, нашел у Вас замечательную фразу, ранее несправедливо пропущенную: stenfСамой базе будет глубоко фиолетово, если на счет не поступят деньги, списанные с другого счета. Вот! Это страшная, недопустимая точка зрения, и именно поэтому Вы думаете, что foreign key - основа. Поймите, данные - не просто "самое ценное, что есть в базе". Это на самом деле единственная ценность, которая там есть. Неверные данные - куда хуже неверной структуры. Смотря с точки зрения "самой базы", Вы выступаете с точки зрения небезызвестного персонажа Райкина, вопрошавшего: "к пуговицам претензии есть?". Видите ли, программа создается ради пользователя. Пользователю - например, автомобиля - нужно, чтобы "машина ехала", и ничего более. Вы, как профессионал-технарь, можете знать, что для того, чтобы машина ехала, у нее должны быть накачаны колеса, но недопустимо проводить подмену понятий, подмену пользовательского удовлетворения (машина едет) техническим аспектом, никому кроме Вас неинтересным. Говоря "самой базе глубоко фиолетово", Вы говорите примерно следующее: "главное - чтобы колеса были накачаны, а то что машина не едет, так самой машине это глубоко фиолетово". stenfсмешно, но вы сейчас чуть не слово в слово цитируете так не любимого вами Джо Селко. Вы переоцениваете мое к нему внимание. Я цитирую общеизвестный факт, чуть менее общеизвестный, нежели "солнце встает на востоке". То, что его цитирует еще и некто Селко, мало что меняет. stenfОднако мой пост был направлен на вашу идею о спецвинтиках в голове для использования null Я такой идеи не выдвигал, с чего Вы ее взяли - не знаю. stenfпоздравляю, вы движитесь против основных течений в современном программировании. Есть одна старая и довольно известная фраза: Hе иди по течению, не иди против течения, иди поперек него, если хочешь достичь берега. Лично я полагаю еще более правильной следующую концепцию: Hе иди по течению, не иди против течения, иди туда, куда тебе надо. stenfпока что, вы четко указали только их недостатки, а про достоинства написали какие-то туманные мысли, что "на практике без них жутко неудобно". Отнюдь. Прежде всего я сказал, что они позволяют легко и естественно описать взаимоотношение "необязательности", нередко случающееся в реальных данных и доставляющее уйму проблем при попытке описать его каким-либо другим образом. Также, например, я указал, что Ваш подход реализуем либо null-ами, либо зацикливанием. Пытаться обходиться без null можно по-разному. Например, наиболее корректным путем будет введение дополнительных сущностей; "необязательность" будет выражаться отсутствием строки в этой дополнительной таблице. Подход плох несколькими вещами: во-первых, большим количеством ненужных join-ов, во-вторых, тем, что надо постоянно помнить о необходимости использовать с этой таблицей outer join, наконец, в лишних тратах на эти дополнительные таблицы. stenfCan you make тынц? (C) Странно Вы как-то поступаете. Мою просьбу не выполняете, но сами тут же просите то же самое. stenfна подобные мои высказывания ? Особливо про "хакнуть данные" please. Даже в страшном сне мне не могла приснится такая интерпретация моих постов Давайте смотреть. Ваши слова, в контексте обсуждения бизнес-правила соответствия дебета кредиту: stenfОднако вполне может так оказаться, что являясь нашим лучшим клиентом, мы хотим подарить ему бесплатные минуты. Если при проектировании системы вы включили в систему проверку на соответствие прихода/расхода - то БД просто не даст нам совершить этот великодушный поступок. То есть, Вы строите ситуацию: есть бизнес-правило, мы хотим "подарить бесплатные минуты", бизнес-правило этому препятствует. И общий контекст - это бизнес-правило нестрашно нарушить, вот один из примеров, когда нарушить его можно и нужно. Это я и называю "хакнуть". В противовес нормальному подходу: учесть новое требование и доработать под него систему. stenfнэправда. Ничего подобного я не хотел. "Сознательно не хотели". Комплекс выдвинутых Вами требований не оставлял другой возможности, строго математически. stenfтут есть важная оговорка, в связи с тем, что сопровождать пьяного розового слона придется другим программистам, необходимо что-бы всем остальным такая абстракция тоже казалась очевидной, "Очевидной" - неудачное слово. Скорее "уместной и адекватно документированной". Скажем, абстракция "проводка" не представляется мне "очевидной". Однако, очень широко используется, и все добросовестно изучают, что же это такое. stenfА так как такие слоны в реальном мире не водяться, то у разных людей будет свое представление о розовых слонах и их повадках, и следовательно в первом приближении такая абстракция не то, что-бы хорошая идея. Ох, а уж какая не то чтобы хорошая идея, например, "аналитического счета"..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2007, 12:23 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34234656&tid=1544780]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 462ms |

| 0 / 0 |
