Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Разрабатываю новую версию склада. Дошел до переделки накладных. Сейчас у меня 4 таблицы с одинаковой структурой для накладных прихода, расхода, возврата и перемещения между складами. Есть большой соблазн запихать это все в одну таблицу разделив только признаком тип накладной. Кто нибудь подскажите где можно наколоться, какие минусы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 08:07 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Если они у тебя отличаюцца только типом, тогда все пучком - делаешь 2 таблицы: накладные и типы_накладных и все, но если у них есть различные аттрибуты, характерные только для одного из типов накладных, тады ето дорогой товарисч обычная ролевая структура. Делаешь так: 1. создаешь таблицу "Абстрактные накладные" 2. вытаскиваешь в нее все ОДИНАКОВЫЕ для ВСЕХ типов накладных атрибуты 3. для каждого типа накладных, у которых есть непопавшие в главную таблицу атрибуты, создаешь свою совственную таблицу, имеющую foreignkey на "Абстрактные накладные"... вот и все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 08:55 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Делай отдельными таблицами, не ленись. В будущем это тебя избавит от огромного гемора, если придется изменить-добавить поле, например ссылку на экспедитора в расходной - придется менять все что связано с обобщенной накладной, а так только с расходной. И так далее. Я сделал себе скрипт, создающий обобщенный документ, а дальше ручками добавляю-изменяю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 09:32 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Согласен c Denis___Ka Накладные должны распологаться в одной таблице. В "заголовке" накладной имеется поле SRC_ID (источник) и DST_ID (получатель). Данные поля ссылаются либо на внутренние подразделения (складские организации), либо на внешних контрагентов. В зависимоси от источника и получателя можно определить тип накладной: внешний приход, внутренние приход (расход) и тд и тп. Конечно, можно и не осуществлять данный анализ, если вы хотите ввести доп поле тип накладной . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 09:40 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Зачем их складывать в одну таблицу, какой смысл кроме кажущейся красоты на первом этапе? Начнем с того что уникальная нумерация будет сопряжена с типом документа, если нужны какието связи, придется вязать ее масу на себя итд итп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 10:11 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKa Начнем с того что уникальная нумерация будет сопряжена с типом документа, если нужны какието связи, придется вязать ее масу на себя итд итп. Подход уникальной нумерации в зависимости от типа документа и есть разделение накладных в отдельные таблицы. При хранении в одной таблице уникальная нумерация (Primary Key) не зависит от типа накладной - она сквозная .... Про связи - легче сделать их для одной таблицы, нежели повторять их (порой один в один дублировать) для нескольких... Вообщем пусть каждый отставивает свою точку зрения - лично мое твердое убеждение - таблица должна быть одна. (даже имеется многолетний положительный опыт работы с такой структурой :-))) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 10:38 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Согласен c Denis___Ka Но различные поля вовсе необязательно выносить... Пущай живут вместе, они друг другу не мешают... (тем более если их всего несколько) У меня, например, весь расчет производится автоматически триггерами при занесении соответствующего признака... Вот бы их писать их на четыре таблицы... или четыре ХП обработки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 10:39 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Я говорю про связи между документами. В случае, если таких связей несколько, ваша таблица будет выглядеть клубком, если вообще возможно будет связать. Сквозная нумерация по всем типам документов тем более не интересно - если завтра выйдет закон о сквозной нумерации накладных на отгрузку, как неоднократно было, что в такой структуре будете делать с Primary Key для всех документов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 11:05 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
olol У меня, например, весь расчет производится автоматически триггерами при занесении соответствующего признака... Вот бы их писать их на четыре таблицы... или четыре ХП обработки... Так они все равно для каждого документа свои, или у вас триггер делает одно и то же для всех документов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 11:13 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
еще раз: Главная задача проектировщика - Добиться как можно большей степени нормализации используя как можно меньшее количество объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 11:14 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKa что в такой структуре будете делать с Primary Key для всех документов? мы говорим о разных понятиях - номер документа и ID документа (сответственно PK ) . И в случае необходимости, никто не мешает вычислять номер документа (если это действительно НОМЕР) как max+1 для соответствующего типа накладной (в принципе можно для каждого типа накладной в отдельной табличке сохранять номер, затем считывать и инкрементировать - при этом на данную операцию будет расходоваться минимальное кол-во серверных ресурсов Это уже частности реализации). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 11:21 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Все же не вижу смысла вносить путаницу в структуру данных, выносить поля в отдельные таблицы, а основные держать в общей. Скажите хоть один довод за, или приведите пример, по производительности, или по удобству выборки и я замолчу :) Единственное удобство - если все проводки содержатся в документах а не отдельных регистрах, тогда одним простым селектом можно выбрать и приходы и расходы, к примеру. Но это годится только для примитивной системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 12:01 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaвыносить поля в отдельные таблицы Структура накладных одна и та же , поэтому выносить поля в отдельные таблицы не нужно. По поводу отдельной сквозной нумерации для каждой накладной и вынесения последнего номера для каждого типа в отдельную таблицу (денормализация) - это пример для экономии ресурсов сервера (этого можно и не делать и просто работать по max(Number)+1 ) УСЕ!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 12:21 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKa …если придется изменить-добавить поле, …придется менять все что связано с обобщенной накладной, а так только с расходной. Зачем менять другие формы ? Ну добавил ты хоть 10 полей в один тип накладной, а причем тут другие ? На других формах будут только те поля, с которыми они работают. Одно другому не мешает. TimKa Так они все равно для каждого документа свои, или у вас триггер делает одно и то же для всех документов? Конечно не один, а три: на INSERT,DELETE и UPDATE для всех документов. И в зависимости от источника/получателя производятся соответствующие действия. Правда, Источник/Получатель у меня тоже в одной таблице с соответствующим признаком… А вот если они разбиты на несколько…, то тогда связки, конечно, усложняются… vooo …в отдельной табличке сохранять номер... ID лучше брать не из таблички, а из генератора (для большей надежности). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 13:08 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
[quot vooo] Структура накладных одна и та же , поэтому выносить поля в отдельные таблицы не нужно. [quot] Пока не нужно. Пока не пришел началник и не попросил в отгрузочную добавить номер ГТД, к примеру. По поводу денормализации спорить не буду, так как это вопрос тонкий - как хранить данные - в нормализованом виде или в куче, и не может служить аргументом, так как вопрос экономии вычислительных ресурсов при денормализации встает боком при обработке данных, и прогнозировать трудно, что будет проще для сервера. Я уж не говорю о целостности данных и прочем, отчего эта самая нормализация придумана старыми дядьками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 13:21 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
По поводу плюсов объединения накладных в одну таблицу. При проектировании каждой таблицы я ставлю вопрос: какие задачи решают объекты, содержащиеся в данной таблице. Для всех четырех таблиц у меня получаются 2 основные задачи : 1- изменение остатков на складе (на складах) 2- изменение текущего сальдо у контрагентов участвующих в операции остальные производные от этих двух функций. Таким образом, суть объектов во всех четырех таблицах одна и та же. Логично объединить эти объекты (накладные) в одну таблицу. Вносить индивидуальные особенности, например, отдельной нумерации для каждого типа меня не затруднит. Меня интересовали как раз моменты, когда я сделал процентов 70 всех отчетов, и заказчик просит сделать что то, что гарантированно можно сделать только с извращениями в особо циничной форме : ). Именно о таких моментах я и спрашивал. По тому, как народ отвечает, таких ситуаций у тех, кто использует подобную структуру не возникало. Если я не прав – остановите меня, пока я не ушел слишком далеко. А то я уже ХП писать начал : ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 13:23 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
авторНа других формах будут только те поля, с которыми они работают. Одно другому не мешает. Насколько я понял, предлагается просто оставлять nulls или заранее условленные значения для тех полей что неиспользуются? Это очень плохой стиль, мне кажется, и гораздо безобразнее выглядит, чем отвести под каждый документ отдельную таблицу, если мы говорим о красоте авторИ в зависимости от источника/получателя производятся соответствующие действия. Значит, код в них все таки разный для разных документов. Ну и чем это отличается от того, что вы разнесете этот код по разным триггерам, вместо того чтобы громоздить эти CASE и IF ? авторПравда, Источник/Получатель у меня тоже в одной таблице с соответствующим признаком… Имеется ввиду, что один и тот же справочник? Это как раз не смертельно, хотя я бы разделил справочник складов и клиентов к примеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 13:28 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
[quot TimKaЯ уж не говорю о целостности данных и прочем, отчего эта самая нормализация придумана старыми дядьками.[/quot] Простите, а где я нормализацию нарушаю. Если в нумерации, то у меня требование к нумерации накладных каждый месяц начинать ее заново - так что в любом случае придется хранить номер следующей накладной. Обрабатывать накладные по таким номерам можно только по ключу номер-дата. А я таким ключам предпочитаю синтетические. Id в объединенний табличке и id в четырех раздельных особых различий не несут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 13:29 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Простите, а где я нормализацию нарушаю. это vooo ответ был про денормализацию. Вобщем, если структура менятся не будет, и вам не придется поддерживать эту базу, то делайте в одной таблице. Добавление одного поля в один из типов документов нарушит нормализацию, если говорить о ней, со всеми вытикающими гемороями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 13:40 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKa …оставлять nulls или… Это очень плохой стиль… …безобразнее выглядит, чем отвести под каждый документ отдельную таблицу… Если сейчас есть четыре типа накладных: приход, расход, возврат и перемещения между складами то, как быть в случае появления учета для фиктивных складов (например: учет в цехе со своими особенностями), где документы несколько отличаются от реальных складов? Добавлять новые таблички для этих документов? (чтоб не было лишних полей с null). Даже простой расход для внутреннего производства и продажу – тоже в разных табличках или указывать ‘пустого’ покупателя? Это тоже самое - как каждый вид товара хранить в отдельной таблице… TimKa …громоздить эти CASE и IF ? В любом случае, когда обрабатываешь перемещение со склада на склад, ты смотришь, откуда и куда и делаешь однотипные вычисления. Только для прихода будет нулевой расход (и наоборот). alex_ll …заказчик просит сделать что то, что гарантированно можно сделать только с извращениями в особо циничной форме… Если для извращений необходимо будет заносить специальные данные с соответствующей обработкой, то когда все документы в одном месте, то достаточно им задать соответствующий признак, который будет общим для всех видов накладных и не надо будет для них создавать специальные таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 14:40 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Если сейчас есть четыре типа накладных: приход, расход, возврат и перемещения между складами то, как быть в случае появления учета для фиктивных складов (например: учет в цехе со своими особенностями), где документы несколько отличаются от реальных складов? Именно так и делается в нормальной системе учета имхо, одна производственная операция - один документ - одна система таблиц для хранения данного документа. Потому что понятие "несколько" весьма растяжимо, и под велением времени это "несколько" вырастает в ощутимую "сколько", а в результате у вас получится огромное табло с кучей нулов, зато одно, и один триггер с пятистами ветвлениями, в котором никто, кроме вас не разберется. Другое дело, что никто не заставляет вас конструировать каждый раз эту систему таблиц вручную. Остальное оставляю без коментариев, думаю, выше все рассказал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 20:48 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
alex_llЕсть большой соблазн запихать это все в одну таблицу разделив только признаком тип накладной. В результате эволюции нашей системы все мы пришли к выводу, что документы должны быть в ОДНОЙ таблице. Может быть, кроме только лишь каких-то извращенных. В новой версии именно так и будет. Завтра напишу плюсы этого, сейчас домой пора :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2004, 22:53 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Вы господа обсуждаете широко известные (по Фаулеру и не только) паттерны: Наследование с одной таблицей, Наследование с таблицами для каждого класса и Наследование с таблицами для каждого конкретного класса. А мораль - здесь нет "лучшего" и/или "правильного" решения - для каждого отдельного приложения и проектировщика оно свое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 03:24 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Вы господа обсуждаете широко известные (по Фаулеру и не только) паттерны Ага, зашел грамотный человек! Жалко что проходящий... Где почитать про это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 08:59 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Marat_L http://martinfowler.com Жизнь коротка - потерпи немного :) А конкретнее, в какой книжке паттерны описаны? А то он много чего понаписал, а жизнь коротка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 14:04 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Теория теорией, но так можно обосновать любой подход в принципе. Так что тут надо больше на практику опираться в конкретной предметной области. Что дало бы хранение в одной таблице кучи разных документов? 1. Взаимосвязь документов определяется единообразно. Если у нас из прихода генерится расход или наоборот, а тем более взаимосвязь документов склада и коммерческих документов - нет заботы о том, как эту взаимосвязь вывести на экран либо учитывать возможность генерации документа из документа. 2. Если по документу склада приход составил 10 штук, из них 5 зарезервировали для перепродажи, на оставшиеся 5 ДВУМЯ документами перехода права собственности полностью израсходовали приход. Запрос доступного остатка по любому документу в такой системе получается одним запросом к одной таблице. 3. Если основные поля выделить в одну таблицу, а отличительные особенности - в другие и связать их 1 к 1, то при добавлении полей возникает дилема, куда добавлять это поле. В 100% случаев развитие системы приводит к тому, что поле, добавленное в дочернюю таблицу, хочется использовать и для других случаев. Если же добавить его в основную и зарезервировать (не показывать) - при необходимости вместо экспедитора туда можно вбить какого-нибудь приемщика. Через пяток лет для зарезервированных полей найдется такое применение, о котором сейчас даже никто и не подозревает. 4. Если бизнес-процесс на предприятии построен таким образом, что не должно быть документов с неутвержденными проводками (это бывает намного чаще, чем можно себе это представить), то для нахождения таких документов необходимо исполнять запрос только к одной таблице. Потому как взаимосвязь документа и проводки единообразна и выводится совершенно стандартно. 5. Про нумерацию документов писали, если одна табличка - один индекс поднимается, мало того, что кода во всех случаях меньше (типа case), так и серверу проще на самом деле жить. 6. При внесении изменений в триггер меняется все в одном месте, тем более что обработка группы типов документов чаще всего стандартна, например, реализация движения ТМЦ на складе или проверка, что документ утвержден. 7. В сервисные процедуры можно передавать просто ID документа, по этому значению всегда можно будет определить, что это за документ, а если таблиц несколько - придется передавать дополнительную информацию. 8. Клинически проще реализация ссылочной целостности. Вот, в общем, что вспомнилось. Отмечу, я не агитирую вставлять ВСЕ документы в одну таблицу. Например, документы склада, финансовые, коммерческие, движения ОС, планирования (не финансового),... - в одну. Но бюджетированию там белать нечего, бюджет не связан с оперативным учетом. Проводки - в другую. Это что касается заголовков, составы - тоже в том же количестке таблиц соответственно заголовкам. Собственно, выкристализованная мысль крайне банальна: деление не таблицы определяется не сущностями, которые будут в них хранится, а категориями взаимосвязей этих сущностей, которые будут использоватсья в системе, так как для разделения похожих сущностей всегда можно ввести дополнительное поле категории сущности в рамках одной таблицы. Теория учит, что если есть новая сущность - надо создавать новую табличку, но практика всегда смеется над такой теорией. Какое счастье, что поставщики, плательщики, сотрудники, юр. лица, пользователи ОС и прочие партнеры хранятся в одной таблице! А в свое время это чуть не про#$али. Апологеты минимилизма могут про 3 таблички и не вспоминать, теоретически можно и в одной таблице с 2-мя полями, одно из которых IDENTITY, все сделать. Пользоваться этим ровно также невозможно, как и системой из 3-х таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 16:40 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
2Тимка Дык сам сижу разбираюсь Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 16:44 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Мне интересно авторКакое счастье, что поставщики, плательщики, сотрудники, юр. лица, пользователи ОС и прочие партнеры хранятся в одной таблице! А в свое время это чуть не про#$али. А у вас сколько атрибутов имеют сотрудники? А сколько фирмы? А как вы это пересекаете? Или у вас пол-таблицы пустота? автор Потому как взаимосвязь документа и проводки единообразна и выводится совершенно стандартно. Может я неправильно понял? Но мне кажется -один только НДС уже создает такое количество разнотипных проводок даже по одному журналу (ex: приход оплачен или не оплачен), что о единообразии оных может только во сне присниться. Или я не прав? Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 17:00 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Marat_LА у вас сколько атрибутов имеют сотрудники? А сколько фирмы? А как вы это пересекаете? Или у вас пол-таблицы пустота? Ну там, ИНН, адрес, еще с десяток будет. ИНН может быть пустой, например. Введены категории партнеров. А плательщик он или контрагент в конечном счете вообще к докуенту относится, в котором он [партнер] используется. Marat_Lодин только НДС уже создает такое количество разнотипных проводок даже по одному журналу Кто ж запрещает делать у проводки состав и связать заголвки проводок и документов? Marat_L(ex: приход оплачен или не оплачен) Вот этого уже я не понял. Приход - это на склад? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 17:22 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
1. Взаимосвязь документов определяется единообразно. Если у нас из прихода генерится расход или наоборот, а тем более взаимосвязь документов склада и коммерческих документов - нет заботы о том, как эту взаимосвязь вывести на экран либо учитывать возможность генерации документа из документа. Я чтото не понял, в чем коренное отличие в единообразности от многотабличной системы - в том что наименование таблиц в запросах не два а одно? Так это дополнительная путаница а не удобство. Все - больше отличий нет. Берете код товара из одного документа и кидаете в другой. Поясните в чем удобство-то? 2. Если по документу склада приход составил 10 штук, из них 5 зарезервировали для перепродажи, на оставшиеся 5 ДВУМЯ документами перехода права собственности полностью израсходовали приход. Запрос доступного остатка по любому документу в такой системе получается одним запросом к одной таблице. Остатки считать лучше не по документам, а по регистрам учета, имхо. Препочитаю различать документы и проводки по ним. Если же добавить его в основную и зарезервировать (не показывать) - при необходимости вместо экспедитора туда можно вбить какого-нибудь приемщика. Через пяток лет для зарезервированных полей найдется такое применение, о котором сейчас даже никто и не подозревает. Ребята, если у вас еще и одни и те же поля используются в разных целях, то целостности данных точно придет капут, не придет и пятка лет. Это уже первые правила нормализации не соблюдаются, а не то что высшие. Дело в том что завтра уйдет человек, который помнил кто приемщик а кто экспедитор, и я посмотрю как будут искать крайнего по такой базе. 4. Если бизнес-процесс на предприятии построен таким образом, что не должно быть документов с неутвержденными проводками (это бывает намного чаще, чем можно себе это представить), то для нахождения таких документов необходимо исполнять запрос только к одной таблице. Потому как взаимосвязь документа и проводки единообразна и выводится совершенно стандартно. Опять - кто сказал что одна таблица это единообразно, а две - разнообразно? Вы вводите кучу неявных правил о том, что, к примеру, в одном и том же поле если это отгрузочная - то хранится клиент, а если внутр перемещение - то склад, но не можете себе позволить ввести явное правило о том что у каждого документа, сиреч таблицы, будет поле "проведен" ? По моему второе гораздо проще и понятнее. 5. Про нумерацию документов писали, если одна табличка - один индекс поднимается, мало того, что кода во всех случаях меньше (типа case), так и серверу проще на самом деле жить. Кода меньше - не значит серверу проще. Это значит что серверу придется разгребать ваши бесчисленные признаки о принадлежности документов, а так же связывать вместо , к примеру, двух таблиц - =заголовок= и =детали= документа - три =заголовок=, =доп поля=, и =детали=, а соединений таких по индексам будет столько же, то есть серверу тяжелее в 1,5 раза минимум. 6. При внесении изменений в триггер меняется все в одном месте, тем более что обработка группы типов документов чаще всего стандартна, например, реализация движения ТМЦ на складе или проверка, что документ утвержден] А если надо внести изменение в триггер для одного документа? Ветвление по типу? Это конечно дело вкуса - копатся в одной огромной процедуре и перекомпилировать ее, рискуя поставить раком всю базу, ради одного документа, или все же найти соотв маленькую процедуру для определенного типа и таблицы соотв, и изменить ее, я предпочитаю второе, и уж точно не вижу первое как преимущество. 7. В сервисные процедуры можно передавать просто ID документа, по этому значению всегда можно будет определить, что это за документ, а если таблиц несколько - придется передавать дополнительную информацию. Вам все равно придется писать код в самой процедуре, которая извлекает тип данного документа, и уж потом производит действия. Так не лучше ли убедится заранее, что вы передали на обработку тот документ что нужно, и передать этот тип явно ? 8. Клинически проще реализация ссылочной целостности тут я просто оставляю без комментариев, потому что не понял, в чем проще, и о какой целостности идет речь. Если в многотабличной системе целостность обеспечивается средствами сервера, то тут сам сервер никакне помешает пользователю привязать табличку с полями от отгрузочной к документу-резерву например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 17:33 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
авторНу там, ИНН, адрес, еще с десяток будет. ИНН может быть пустой, например. Введены категории партнеров. А плательщик он или контрагент в конечном счете вообще к докуенту относится, в котором он [партнер] используется. Каждый конечно по своему, но мы стараемся избегать заведомо пустых полей, т.к. это заведомо непродуктивно увеличивает физический размер данных и создает лишнюю нагрузку на ресурсы сервера. Хотя я конечно понимаю, что засчет такого объединения вы получаете унификацию отчетов и некоторое облегчение на этапе разработки. автор Приход - это на склад? Да, приход на склад от поставщиков. У нас если была предоплата, то НДС приходуется сразу на 19 счет, а если не было - то прячется на другой (непомню какой). Кстати оплата у вас тоже в этой таблице? Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 17:43 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKa Берете код товара из одного документа и кидаете в другой. Поясните в чем удобство-то? Удобство - вообще этого не делать. Товары - ТМЦ -это справочник. Из документа генерим документ, в который попадают все остатки по нему. Взаимосвязь документа ничего общего с тем, что в них один товар, не имеет, это, например, контроль, что по конкретному заказу не отгружено больше, чем заказано, пусть даже есть 2 корректировки этого заказа, 2 резерва и 5 перемещений, рожденных из этого заказа. TimKaв том что наименование таблиц в запросах не два а одно? Так это дополнительная путаница а не удобство. Все - больше отличий нет Ну что ж, будем разруливать. Есть 2 документа в разных табличках. У документа есть состав - еще 2 таблички, к строке состава коммерческого документа может быть привязано несколько налогов - еще 2 таблички. обрывание на любом шаге приведет либо к отходу от ссылки по ID либо к дополнительным телодвижениям по иденификации состава доумента либо документа (удаляем документ - какой состав удалять?). TimKaОстатки считать лучше не по документам, а по регистрам учета, имхо Все зависит от того, как понимать такие остатки. Остаток по заказу я вам привел. ничего общего ни со складскими остатками ни с проводками это не имеет. TimKaПрепочитаю различать документы и проводки по ним Я тоже. И зачем только это было писать? TimKaесли у вас еще и одни и те же поля используются в разных целях, то целостности данных точно придет капут Что вы понимаете под целостностью данных? Про пяток лет - надеюсь вы не со зла, уж больше живем, и не только мы. Существует вообще концепция согласно которой все поля кроме PK необязательные, а остальное мы на клиенте обставим (слава богу, у нас не так). И ничего, живет и процветает. TimKaпервые правила нормализации не соблюдаются, а не то что высшие Идите читайте про нормализацию, а заодно и про денормализацию. И без примеров не приходите. Будем считать, что у нас тут также презумпция невиновности соблюдается. Потому приведите мне пример, что нарушает структура, в которой в заголовке документов склада указано 2 ссылки на склад, вторая заполняется только для перемещения и для обычного прихода пустая. TimKaзавтра уйдет человек, который помнил кто приемщик а кто экспедитор Для этого случая есть документация. Да и аргумент какой-то странный. А если уйдет тот, кто помнил, как таблица зовется и поля в ней и куда они ссылаются? TimKaв одном и том же поле если это отгрузочная - то хранится клиент, а если внутр перемещение - то склад Не надо впадать в крайности. Склады отдельно, партнеры отдельно, счета отдельно, и т.д. Если поле ссылается на справочник складов, оно не ссылается на справочник партнеров. TimKaно не можете себе позволить ввести явное правило о том что у каждого документа, сиреч таблицы, будет поле "проведен" ? По моему второе гораздо проще и понятнее Что значит этот признак? наличие проводок? наличие утвержденных проводок? Зачем он вообще, если его измение ничего не решает? Если его "опустить" - по документу исчезнут проводки, и наоборот? TimKaтри =заголовок=, =доп поля=, и =детали= Вы меня с кем-то путаете, я про дополнительные поля в отдельной таблице не писал. А ускорение работы и уменьшение нагрузки на дисковую подсистему в нашем случае абсолютно реальный факт, просто взаимосвязь документов уже частично переделали, так что есть данные, что было ДО и что стало ПОСЛЕ. TimKaизменить ее, я предпочитаю второе, и уж точно не вижу первое как преимущество А я предпочитаю сотрудников, не дублирующих код и тестирующих свои доработки. Так как чаще ошибки бывают, когда надо сделать одно и то же в 10 местах, сделали в одном оттестировали, те кто правильно сделал, идут курить бамбук, а остальные - реплицировать изменения в остальные 9 мест, при этом аккуратность и внимательность резко снижаются. Кстати, никто не утверждал, что процеура (=триггер) одна и большая. Да и комментирование кода помогает. Вообще какие-то странные аргументы пошли :). TimKaВам все равно придется писать код в самой процедуре, которая извлекает тип данного документа, и уж потом производит действия Есть набор операций, которые я могу произвести с документом независимо от его смысла. Например, проверка утвержденности документа, проводок, проверка на доступность документа конкретному пользователю. Порядка 30% операций (проверок) у нас типичны, остальные группируются по типам документов (например, расчет учетной стоимости расхода вообще не зависит от того, расход это со склада или выдача МБП). TimKaпотому что не понял, в чем проще, и о какой целостности идет речь. Если в многотабличной системе целостность обеспечивается средствами сервера Если делать ее декларативно (то есть, через references). Однако еще на заре развития системы от них отказались, из-за реализаци ссылочной целостности на триггерах и групповой проверке ссылочной целостности при груповых операциях элементарно повышается скорость работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 18:12 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Marat_LДа, приход на склад от поставщиков. У нас если была предоплата, то НДС приходуется сразу на 19 счет, а если не было - то прячется на другой (непомню какой). У вас видимо объединено понятие коммерческого документа и документа склада. У нас же у документа склада отсутствуют налоги в принципе, его задача - формировать складское движение и учетную стоимость в заивисимости от ТМЦ, даты, метода учета на складе и еще кучи признаков (в том числе прихода на склад по оплате). Для формирования учетной стоимости на складе неважно, НДС это или нет. В такой формулировке оплачивается ккоммерческий документ, из него рождается прямо или косвенно документ склада (или наоборот, кстати). Далее, проводки можно генерить не для документа, уж если очень хочется, а для взаимосвязи (при всей бредовости такой мысли, имеется бизнес-процесс пости у половины наших клиентов, когда отгрузка и переход права собственности разделены по времени, так просто сделали отдельный документ, по большому счету представляющий пару Акта ППС и документа склада, и по нему генерим проводки). Это если совсем полная задница. Marat_LКстати оплата у вас тоже в этой таблице? С оплатами сложнее. Оплаты бывают как таковые (платежка), так и оплаты коммерческих документов (платежкой можно оплатить 2 документа и наоборот), так и оплаты их строк (необходимо для учета в книгах покупок/продаж хотя бы потому, что документ может быть оплачен не полностью). Первые - это финансовые документы, остальные - это разные таблички и таковыми они останутся (это следствие того, что даже оплата документа используется в таком большом количестве различных бизнес-процессов у наших клиентов, в том числе оплата коммерческих документов оплатами коммерческих документов, их просто совсем нецелесообразно в одну кучу с документами валить). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 18:39 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Ну чтож, разногласий не так уж много :) По крайней степени по чисто складским документам. Но все-таки сваливать справочники в одно, неужели дает выигрыш по производительности системы? автор А я предпочитаю сотрудников, не дублирующих код и тестирующих свои доработки. Так как чаще ошибки бывают, когда надо сделать одно и то же в 10 местах, сделали в одном оттестировали, те кто правильно сделал, идут курить бамбук, а остальные - реплицировать изменения в остальные 9 мест, при этом аккуратность и внимательность резко снижаются Дык если надо просто скопировать - зачем внимательность? Чаще бывает, что надо переносить с изменениями - тогда по любому приходится делать все варианты. Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 18:57 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Marat_LНо все-таки сваливать справочники в одно, неужели дает выигрыш по производительности системы? А справочники в одну кучу и не валятся. У нас порядка двух сотен таблиц под справочники заведено. Если про партнеров - то для меня это один справочник. Может ли быть плательщиком физ. лицо? Да. Может ли быть юридическое? Да. Хотите разделить их по типу партнеров, по категории в отношении той или иной сущности - это всегда пожалуйста, введением поля типа это делается замечательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 19:12 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Marat_LДык если надо просто скопировать - зачем внимательность? Позволю себе пойти на шаг дальше, зачем вообще копировать, если это одно и то же? Речь именно о небольших изменениях, которые иногда забываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 19:14 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Дабы не раздувать флейм, укорочу свой ответ, без цитат. По моему глубокому убеждению, чем сильнее структура данных отображает исходные бизнес процессы, тем проще обслуживать и модифицировать систему в целом. В одном вы правы - можно написать базу с одним полем, это показал еще Тьюринг со своей машиной - конечно теоретически, при все вашем пренебрежении к теориям :) - вопрос в удобстве написания, сопровождения и обслуживания. Можно написать базу с кучей таблиц, которая будет нагружать сервер так, что и не снилась машине Тьюринга с одним единственным бинарным полем, и считать достаточным основанием для обьединения их всех в базу с одной таблицей - вопрос, считать ли это аргументом за то, чтобы вынести логику за пределы структуры данных в код, а по сути так и происходит. Но потом людям которые будут сопровождать эту базу, придется заниматся обратным инженерингом кода, чтобы понять, в каком случае что происходит в этой таблице, и уж совсем не обязательно это ведет к повышению производительности системы, не считая затрат на сопровождение, и для меня это не странный аргумент . Кстати отказ от декларативной поддержки в пользу триггерной изза причин повышения производительности для меня соувсем уж новость, интересно, на какой системе так обстоят дела, что код, написаный пользователем работает быстрее встроенного механизма связывания по ключам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 20:28 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaКстати отказ от декларативной поддержки в пользу триггерной изза причин повышения производительности для меня соувсем уж новость, интересно, на какой системе так обстоят дела, что код, написаный пользователем работает быстрее встроенного механизма связывания по ключам? На любой. Это определяется не системой, а прежде всего объемом данных. Условие CONSTRAINT (в принципе любое декларативное) проверяется сервером столько раз, сколько изменяется строк (так как проверить надо для каждой), триггер в этом случае работает 1 раз. Другое дело, заметно это или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2004, 23:10 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaДабы не раздувать флейм, укорочу свой ответ, без цитат. еще Тьюринг ./// машине Тьюринга Это твой друган что ли? Вместе пиво пили в его машине? :) Короче чуши много нагородили. Ничего не порешили. Уважаемый TimKa, прошу вас делайте так так как вам хочется. Но учитывайте, что в пользу вашей позиции было высказано куда меньше, чем против! Выводы выводим сами. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 07:20 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
авторНо учитывайте, что в пользу вашей позиции было высказано куда меньше, чем против! Видети ли, против можно действительно наговорить много, но аргументов то нет практически, кроме того что теория - это смешная штука, и хоть и полмира по ней живет, у нас все равно лучше. Люди спорят, только =собираясь= делать в новой версии по-новому, я же делал и так и сяк, и понял что раздельные таблицы значительно лучше, а против так ни одно аргумента существенного не было выдвинуто, или я не увидел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 09:12 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов На любой. Это определяется не системой, а прежде всего объемом данных. Условие CONSTRAINT (в принципе любое декларативное) проверяется сервером столько раз, сколько изменяется строк (так как проверить надо для каждой), триггер в этом случае работает 1 раз. Другое дело, заметно это или нет. А триггер получается, проверяет всю совокупность строк как одну единицу, непроверяя кждую? Я действительно этот вопрос не изучал, для меня это новость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 09:14 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Хотя впрочем, это тоже похоже ошибка, как и все остальное. http://www.sql-server-performance.com/trigger_tuning.asp Tips for Performance Tuning SQL Server Triggers Don't use a trigger to enforce referential integrity if you have the option to use SQL Server's built-in referential integrity instead. Using SQL Server's built-in referential integrity is much faster than using a trigger to perform the same task. [6.5, 7.0, 2000] Updated 7-17-2003 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 09:23 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
http://www.software-factory.ch/programming/sql2000/recpractices.htm Use Cascading Referential Integrity Instead of Triggers Use Declarative Data Inegrity Whenever Possible туда же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 09:30 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaА триггер получается, проверяет всю совокупность строк как одну единицу, непроверяя кждую? Я действительно этот вопрос не изучал, для меня это новость. В inserted набор строк лежит, их можно одним exist-ом проверить. Кроме того, возможны ситуации, когда проверка может вообще не понадобиться: 1) если другая более существенная и дешевая по ресурсам проверка выполнена раньше и обнаружена ошибка. 2) если производится репликация данных и данные УЖЕ ПРОВЕРЕНЫ на отправляющей стороне. Более того, есть ситуации, при которых совершенно невозможно реализовать ссылочную целостность на CONSTRAINT, например, это ВСЕ БЕЗ ИСКЛЮЧЕНИЯ ситуации, когда репликация таблицы осуществляется только через процедуру и на PK таблицы есть ссылки в других таблицах. По поводу ссылок. 1) Существуют другие сервера, кроме MSSQL (хотя, на MSSQL прирост скорости при работе с группой записей также заметен). 2) Не все слепо принимайте на веру что пишут, самая банальная статья, отражает взгляд автора, а за Use money for Currency я бы сразу уволил (хотя, большинство - разумные вещи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 10:58 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaхоть и полмира по ней живет Во-первых, полмира не то что не имеет компьютер, а даже его не видели никогда. Во-вторых, даже если речь идет о правильной половине, а) как-то живет вторая половина? б) разве ж это тоже не теория, только немного другая? TimKaЛюди спорят, только =собираясь= делать в новой версии по-новому, я же делал и так и сяк, и понял что раздельные таблицы значительно лучше, а против так ни одно аргумента существенного не было выдвинуто, или я не увидел :) Сделали уже, взаимосвязь, я писал, видимо, невнимательно читаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 11:02 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
2TimKa Попробуйте все же ответить насчет положительных сторон того, что приход и расход в разных таблицах. Ну и несоответствие нормальным формам в моем примере с одним пустым складом для прихода или расхода жду от вас, за слова отвечать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 11:05 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaаргумента существенного не было выдвинуто, или я не увидел :) А как вы определяете СУЩЕСТВЕННОСТЬ аргументов? :) В том то и дело, что для кого то они существенны, а для кого-то нет. Каждый в праве выбирать. Я вот тоже поддерживаю идею все таки складывать однотипные докукменты в одну таблицу. Потому что сейчас приходится "расковыривать старую систему" в которой все было разнесено по разным таблицам. Оххх и геморрр.. :( Хотя там еще конечно куча просто чисто ошибок проектирования и программирования. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 11:08 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов2TimKa Попробуйте все же ответить насчет положительных сторон того, что приход и расход в разных таблицах. Ну и несоответствие нормальным формам в моем примере с одним пустым складом для прихода или расхода жду от вас, за слова отвечать надо. Сергей, у вас получается избыточность информации, т.е. если отгрузочная, значит поле должно быть null. А это, хоть и неявная, функциональная зависимость от поля "тип документа". Хотя я имел ввиду другое, я вас действительно попутал с теми, кто советует выносить поля в отдельные таблицы с отношением 1-1. Кстати, многие авторитеты придерживаются мнения, что поля со значением null вообще не допустимы, так как зачастую невозможно понять, что с ним произошло в прошлом, и что будет в будущем в результате операций над ним. Положительные стороны изложил выше - проще сопровождать, локализовать и отлавливать ошибки, соответствовать моменту, модифицировать базу практически налету - достаточно запретить выписывать один тип документа, вместо того чтобы останавливать весь процесс, и не греть голову о соблюдении целостности, так как она заложена в структуру средствами сервера. по поводу В inserted набор строк лежит, их можно одним exist-ом проверить. Я думаю в случае ссылочной целостности так и делается, куда бы этот набор инсертед девался, или вы считаете - раз триггера нет, то и набора записей inserted нет? Я не говорил, заметте, что _везде_ надо использовать ссылочную целостность, конечно есть места, где ее использовать нельзя, а вот вы писали, в ответ на вопрос, на каком сервере получены такие результаты, что На любой. Это определяется не системой, а прежде всего объемом данных. а теперь пишете, что Существуют другие сервера, кроме MSSQL Ну и кто из нас не отвечает за свои слова? Про полмира вы со зла, я конечно писал про тех, кто разрабатывает базы. А вторая полмира, видимо, пишет без теорий, я так думаю, и наступает на грабли, на которые наступали много раз другие. 2Klick вобщем я не настаиваю на том что мои аргументы существеннее, просто ссылаюсь на свой и мировой опыт, а так же теорию, которую, хоть и сам слабо знаю, но хотел бы знать, от того и ввязался в дискуссию :) по поводу Use money for Currency была дискуссия на этом форуме, пришли к мнению что это верная позиция, насколько я помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 12:07 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaСергей, у вас получается избыточность информации, т.е. если отгрузочная, значит поле должно быть null 1) Это не проверяется, ибо незачем. 2) NULL - нет информации, какая тут может быть избыточность? Вот если бы поле было обязательным и туда бы писали пото же склад что и в первое - тогда та. TimKaмодифицировать базу практически налету - достаточно запретить выписывать один тип документа, вместо того чтобы останавливать весь процесс, и не греть голову о соблюдении целостности, так как она заложена в структуру средствами сервера. Достаточно обновление данных производить в разрезе типа документа. TimKaкуда бы этот набор инсертед девался, или вы считаете - раз триггера нет, то и набора записей inserted нет? Да. inserted формируется исключительно для триггера, во всех остальных случаях он просто отсутствует, так как неправильные обработанные записи не помещаются в лог. TimKaа теперь пишете, что Существуют другие сервера, кроме MSSQL Это относилось к Вашим ссылкам, представленным в качестве аргументов. Они касались только MSSQL. TimKaпо поводу Use money for Currency была дискуссия на этом форуме, пришли к мнению что это верная позиция, насколько я помню. Будут проблемы с округлением, зависящие от контекста операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 13:06 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Про исбыточность - Информации нет а поле есть, вот какая :) Я не про обновление говорю, а, скажем, если надо изменить бизнес правило, добавить одну процедуру на документ итп. Про инсертед - не могу судить так смело, так как не знаю что происходит внутри сервера, но предполагаю что инсертед всеже есть, иначе откуда он узнает что вставлено и куда. :)) Про сервера - да существуют и другие, но анализ по всем проводить не собираюсь, вы-то так и не сказали на каком у вас система, но сказали что от системы не зависит, значит достаточно найти факты хотябы об одном чтобы опровергнуть высказываение? Про округление - инетерсно, в каком случае проблем с округлением нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 13:24 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaесли надо изменить бизнес правило, добавить одну процедуру на документ итп. Под if делается и все. TimKaПро сервера - да существуют и другие, но анализ по всем проводить не собираюсь, вы-то так и не сказали на каком у вас система Текущее место работы - MSSQL2000 и ASE. До этого приходилось работать и на DB2/INFORMIX/ORACLE. Про наличие сего факта для MSSQL я уже писал. TimKaПро округление - инетерсно, в каком случае проблем с округлением нет? Если как numeric. Более того, он на всех платформах проблем не знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 13:34 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Теория, практика... Вот Вам практика: Фирма работает 9 лет, все в разных таблицах, даже в нескольких базах. Закопались так, что признали -- работать так дальше невозможно. Пригласили меня -- сижу уже пол-года разгребаю эту кучу г... т.е. информации. А теперь о том, что занимает 90% времени: 1. Разбираюсь в структуре каждой таблицы. А структура у каждой таблички разная. 2. Из десяти однотипных, но разных таблиц заливаю данные в одну. Прибил бы разработчиков... Понапихали все в разные таблицы, теперь элементарное сальдо по корреспонденту посчитать не могут, потому что у них один и тот же корреспондент в трех-четырех разных таблицах сидит. И еще один плюс насчет объединения данных в меньшем количестве таблиц. Почему-то все считают, что фирма должна иметь в штате команду программистов, которые будут под каждый чих директора настраивать базу данных. Точнее так считают программисты, которые всегда хотят кушать и всегда готовы работать над базой -- лишь бы делом не заниматься. А реально программист должен автоматизировать предприятие. Сказать: работайте, я дал вам все необходимое -- и уйти! Это в идеале конечно. Если предприятие не расширяется часто. Нужен новый документ -- пользователь создал новый вид документа. Нужен новый вид товара -- пользователь создал новый вид товара. Нужен новый вид корреспондента -- пользователь создал новый вид корреспонднета. Нужна аналитика -- добавил аналитику. Нужен отчет -- добавил отчет. Все сам! Без создания новых таблиц и изменения в структуре БД. Конечно это в идеале, но к этому иделу нужно стремиться! Нужно стремиться к автоматизации деятельности предприятия к самостоятельной работе пользователей а не завязывать на себе все потоки. Понятно, что нужна четкая система распределия прав. Но это всегда нужно. В реальности большинстов программистов готовы каждый день наворачивать структуру базы, исправлять свои ошибки, курочить уже работающее, переделывать плохо сделаное, наспех делать новое с одной целью -- постоянно доказывать начальству, что без него никак, что он с утра до вечера занят, что он трудится не покладая рук, что ему нужно повысить зарплату, нанять еще двоих-троих подчиненных... и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 13:52 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
2 Сергей так if стоит в триггере на всю таблицу, а не на отдельный документ. ну ладно, оставим про триггеры и связи пока я сам не испытаю это на своей шкуре )) если одни говорят одно, а другие - другое, надо испытывать самому. но ошибки округления то куда деваются? хоть нумерик хоть карренси, округлять до двух знаков надо... и в топике про округления народ весь за каренси голосует. 2 Николай - полностью согласен - в том плане что должна быть система и грамотно спроектировано все. Если не грамотно - что много табличек что одна, замучаешься разгребать. А вот теперь скажите, в какую систему проще добавить документ - в однотабличную или многотабличную? Разница в том, если так можно выразится, что часть работы при многотабличной организации перетекает с кода на структуру - если вы однотабличной вы добавили тип документа, вы должны залезть и поправить триггеры, работающие на обеспечение целостности, как минимум... В многотабличной вы просто генерите из шаблона таблицы и отношения, и триггеры к ним, и базовые процедуры - добавить провести док итп. и все в одном месте, систематизировано по названию. Почему генерить документы без изменения структуры вы считаете проще, чем с изменением, не пойму... Конечно, если сервер выполняет функцию хранилища данных да и только, а вся бизнеслогика реализована на клиенте, возможно это и так... А ведь еще есть раздача прав, секурность и все такое :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 14:25 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
А вот теперь скажите, в какую систему проще добавить документ - в однотабличную или многотабличную? Вам видимо проще в многотабличную... Мне наоборот. Мы оба правы. вы должны залезть и поправить триггеры, работающие на обеспечение целостности, как минимум... Нет, не должен. Я вообще ничего не должен. Начальник отдела создает новую папку, обзывает ее "Новый документ хитрого прихода", в свойствах папки указывает, по каким правилам должен формироваться документ, раздает права. (Чтобы Вы правильно меня поняли -- все это он делает со своего рабочего места, с клиента, о существовании табличек он даже не подозревает.) Может быть Вы на примере покажете, где я что-то должен. В многотабличной вы просто генерите из шаблона таблицы и отношения, и триггеры к ним, и базовые процедуры... Это называется "просто"? Все. Вы меня окончательно убедили, что многотабличные системы -- это ужас! :) А ведь еще есть раздача прав, секурность и все такое :) Обязательно! Обязательно должен быть человек, который занимается раздачей прав. Программа клиент-администратор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 14:41 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaно ошибки округления то куда деваются? хоть нумерик хоть карренси, округлять до двух знаков надо Это с чего это так вдруг до двух-то? У нас например, настройка есть специальная. Да и если одна валюта базовая, другая зависимая (просто через множитель), почему они должны одинаково окруляться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 14:54 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Нет, не должен. Я вообще ничего не должен. Начальник отдела создает новую папку, обзывает ее "Новый документ хитрого прихода", в свойствах папки указывает, по каким правилам должен формироваться документ, раздает права. Ну правильно, а дальше то что происходит? что делает при этом программа, в общих чертах? Мне просто стало интересно, я ведь не спорю... К примеру создает он папку, указывает поля документа, пишет формулы проводок и нажимает ок, дальше что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 14:57 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов TimKaно ошибки округления то куда деваются? хоть нумерик хоть карренси, округлять до двух знаков надо Это с чего это так вдруг до двух-то? У нас например, настройка есть специальная. Да и если одна валюта базовая, другая зависимая (просто через множитель), почему они должны одинаково окруляться? ну пять валют, знаков от одного до пяти, какая разница )) округлять то надо, куда ошибки то деваются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 14:59 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaНу правильно, а дальше то что происходит? что делает при этом программа, в общих чертах? Мне просто стало интересно, я ведь не спорю... К примеру создает он папку, указывает поля документа, пишет формулы проводок и нажимает ок, дальше что? Да собственно все. На этом работа начальника отдела заканчивается. Дальше пользователь/оператор становится на эту папку, создает документ, заполняет, сохраняет. Все. Проводки есть. Можно смотреть отчеты/остатки/движение... Видно, что знаете область, приятно с Вами иметь дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:04 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Хорошо быть таким начальником, у которого работа на этом заканчивается :) Зашел в программу - создал папку - пошел отдыхать :) Но я то про программу спросил :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:15 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaкуда ошибки то деваются? Странный вопрос. Данные в БД большей частью попадают неокругленые (не только суммы валют, то же количество). В момент расчета (суммы, доступного остатка,...) производится округление. В общем, вопрос я не понял. По мне он аналогичне вопросу, куда деваются крошки от мацы, воск со свечей и далее как в известном анекдоте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:15 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
ну вы написали, что тип currency знает проблемы с округлением, а тип numeric нет, независимо от платформы, вот и вопрос - какие проблемы то? я не шучу, мне правда это важно знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:32 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Хорошо быть таким начальником, у которого работа на этом заканчивается :) Зашел в программу - создал папку - пошел отдыхать :) А программистом быть еще лучше. :) Он даже папку не создавал, он вообще ничего не делал. Он вообще в Quake играет... :) Но я то про программу спросил :)) А что программа должна делать? Появилась запись в т. "Папки документов", появилась запись в т. "Правила создания документов". Появились записи в т. "Права пользователя". Я упрощаю конечно, но логика именно такая. Начали появляться записи в т. "Документы", в т. "Содержимое документа" в т. "Дерево документов"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:34 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Николай, вобщем то же самое происходит и в многотабличной среде, только появляется еще и таблички отдельные, никем не перепутаные :) А программист все пьет и пьет пиво и играет в квейк :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:50 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
TimKaну вы написали, что тип currency знает проблемы с округлением, а тип numeric нет, независимо от платформы 1) Что будет с currency, если сделать дамп на одной платформе и поднять на другой? 2) Хранение сумм по конкретной валюте может зависеть от настроек округления currency? А если мне надо 6 знаков после запятой (в простейшем случае - кросс-курс, если в системе есть валюты в 1000 раз больше и в 1000 раз меньше некоторой)? Есть еще причины, н они с SQL не связаны, например, внутренний формат хранения money в BDE, из-за которого может возникать небольшая но все же ошибка. Собственно, это не аргумент, это так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 15:52 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Вобщем, с каренси понятно - зависимость от платформы. Я с этим слабо знаком, но думаю что найдутся и другие типы, что могут пострадать при переносе.... Сам кросс курс конечно глупо хранить в каренси, потому что курс это не деньги а коэффициент... С правилами округления вообще надо быть осторожным - тут как раз зависимость и от платформ и о компиляторов всегда была, надо просто использовать функции округления, которые заранее известно как округляют на любой платформе, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 16:13 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
А теперь представим себе что Вы программист. Ситуация №1 И вы написали новую версию клиента. И нужно структуру базы обновить. В случае однотабличной структуры вы не задумываетесь над тем, чем занимается предприятие и пишете для всех своих предприятий -- (вы хороший программист и ваша программа используется на нескольких фирмах) одинаковый скрипт обновления. В случае многотабличной структуры Вы не представляете структуру БД каждого предприятия, не знаете сколько там таблиц, не знаете структуры новых таблиц, вы не знаете ничего -- и чтобы обновить версию Вы объезжаете каждую фирму отдельно... Да о каком обновлении может идти речь, если везде разные клиентские программы -- под разные структуры. Впрочем, если Вы решаете эти проблемы -- Вы действительно хороший программист. :) Ситуация №2 Вам предложили работу в другой фирме, где другая структура БД, на большую зарплату. В случае монотабличной структуры время на освоение новой базы будет минимальным, поскольку единая т. Документы не может сильно отличаться от единой т. Документы в другой базе. В случае многотабличной структуры Вам придется изучать все новые таблицы и разбираться со структурой каждой новой таблицы. И времени уйдет гораздо больше. Впрочем мое мнение конечно необъективно... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 16:29 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Долго читал, и решил поделиться своим опытом. По-началу тоже счёл, что приход и расход суть движения с одинаковыми атрибутами и засунул всё в одну таблицу. Потом туда засунул также и возврат, и переоценку. Со временем, у расхода появилось много дополнительной информации и, честно говоря, уже пожалел, что сделал одной таблицей. Просто устаю вспоминать, какой флаг что значит (приход-новый, приход-возврат, расход-опт, расход-рознциа, расход-переоценка и т.д.), написал даже памятку себе :). С тех пор пришёл к выводу, что если есть хоть какой-то намёк на разный функционал у 2-х типов объектов, то разношу их в разные таблицы. И очень рад этому своему решению, т.к. сопровождение стало просто на 2 порядка легче в понимании и багов при всяких обновлениях меньше. А также по поводу: Николай МВ вы должны залезть и поправить триггеры, работающие на обеспечение целостности, как минимум... Нет, не должен. Я вообще ничего не должен. Начальник отдела создает новую папку, обзывает ее "Новый документ хитрого прихода", в свойствах папки указывает, по каким правилам должен формироваться документ, раздает права. (Чтобы Вы правильно меня поняли -- все это он делает со своего рабочего места, с клиента, о существовании табличек он даже не подозревает.) Ну тут флаг в руки программисту для написания "программы клиент-администратора" с возможностью добавлять и новые папки и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 16:48 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
2 Nikola18 См. мой пост выше № 777380. Предположительный вариант развития Вашей базы. Не хочу Вас обидеть, конечно если делать хорошо, то оно всегда хорошо. :) Флаг в руках, программа клиент-администратор тоже... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 17:00 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Ситуация №1 Новый клиент под одну таблицу ничем не отличается от нового клиента под многие - как в первом так и во втором случае вы должны знать документооборот на каждом предприятии, и бизнес процессы - а привязать к клиенту одну табличку или десять - в соответствии со структурой документов - дело техники, если есть система в наименованиях таблиц - это делается так же одним скриптом. В самом деле - у вас пять форм под пять документов. У каждого свои поля. В чем отличие, привязываете ли вы к ним одну таблицу, но читая оттуда разные поля, в зависимости от документа, или пять? Да только в том, что путаницы меньше с полями. Ситуация №2 А вот здесь я полностью согласен с вами в той части, что несколько таблиц обязывают к дисциплине, и если нет системы, соглашений имен, соглашений об обязательных полях итд итп то в такой каше значительно труднее разобратся - но это вопрос к тому, кто до вас создавал ее, мы-то с вами умнее ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2004, 17:49 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Было у меня несколько проектов на тему. Тоже писал и одной таблицей, и в разные. Вывод такой. Самая простая и понятная, и удобная структура - это Шапка + подчиненная таблица для прихода, расхода, списания, передачи в производство и т.д. Все остальное со временем превращается в большие заморочки. Сам, когда приходится что-то править в старых своих однотабличных проектах, думаю, какой дурак все это придумал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 05:26 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Хотя я по большей части пользователь, но все же у меня сложилось твердое свое мнение об учетной системе (склад - бухгалтерия, без аналитики - всяких олапов). В одной - многих таблицах - для меня не суть. Разделение для меня происходит по следующему критерию: - есть первичные документы, те что приходят или генерятся (отличительная черта - объем растет линейно со временем). - есть статистика по первичным документам (остатки, реестры, регистры, справочники, ...) (объем почти не растет). И для меня правильно организованная структура хранения такая: - четко отделять области первичных документов и статистики по ним (скорость доступа к первичным документам не важна, к статистике - критична), - пользователь работает ТОЛЬКО со статистикой, в первичные дкументы почти не лезет (если лезет - то только прочитать). И плохо, что в обычных системах все это в одной каше, не разделяется. Мнения против этого - обычно - что нельзя наладить статистику на все случаи жизни. И отсюда возникают тяжелые запросы ко всей накопленой базе и заторы. А может я просто больших баз не видел, может там сделано правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 12:23 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Хотя я по большей части пользователь, но все же у меня сложилось твердое свое мнение об учетной системе (склад - бухгалтерия, без аналитики - всяких олапов). В одной - многих таблицах - для меня не суть. Разделение для меня происходит по следующему критерию: - есть первичные документы, те что приходят или генерятся (отличительная черта - объем растет линейно со временем). - есть статистика по первичным документам (остатки, реестры, регистры, справочники, ...) (объем почти не растет). И для меня правильно организованная структура хранения такая: - четко отделять области первичных документов и статистики по ним (скорость доступа к первичным документам не важна, к статистике - критична), - пользователь работает ТОЛЬКО со статистикой, в первичные дкументы почти не лезет (если лезет - то только прочитать). И плохо, что в обычных системах все это в одной каше, не разделяется. Мнения против этого - обычно - что нельзя наладить статистику на все случаи жизни. И отсюда возникают тяжелые запросы ко всей накопленой базе и заторы. А может я просто больших баз не видел, может там сделано правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 12:27 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
Очень полезная тема. To Сергей Васкецов: Подход с одной таблицей интересен и привлекателен с точки зрения некой базовой универсальности. Хочу Вас спросить, а нет ли у Вас проблем с блокировками в этой связи? В данном случае возрастет количество обращений к двум таблицам (условно "шапка" и "сроки") -> повышается вероятность эскалации блокировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 20:10 |
|
||
|
Структура таблиц с накладными
|
|||
|---|---|---|---|
|
#18+
LeonidВ данном случае возрастет количество обращений к двум таблицам (условно "шапка" и "сроки") -> повышается вероятность эскалации блокировок. На ASE (слава богу! в отличие от MSSQL) можно задать уровень блокировки, он у нас везде lock datarows. Для обеих платформ у нас имеется некий механизм собственной блокировки, который дело до begin tran может даже и не довести. В целом - проблем нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 20:43 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1546382]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
118ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 410ms |

| 0 / 0 |
