powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц с накладными
25 сообщений из 75, страница 1 из 3
Структура таблиц с накладными
    #32580247
Фотография alex_ll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разрабатываю новую версию склада. Дошел до переделки накладных. Сейчас у меня 4 таблицы с одинаковой структурой для накладных прихода, расхода, возврата и перемещения между складами. Есть большой соблазн запихать это все в одну таблицу разделив только признаком тип накладной. Кто нибудь подскажите где можно наколоться, какие минусы?
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580272
Denis___Ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если они у тебя отличаюцца только типом, тогда все пучком - делаешь 2 таблицы: накладные и типы_накладных и все, но если у них есть различные аттрибуты, характерные только для одного из типов накладных, тады ето дорогой товарисч обычная ролевая структура.
Делаешь так:
1. создаешь таблицу "Абстрактные накладные"
2. вытаскиваешь в нее все ОДИНАКОВЫЕ для ВСЕХ типов накладных атрибуты
3. для каждого типа накладных, у которых есть непопавшие в главную таблицу атрибуты, создаешь свою совственную таблицу, имеющую foreignkey на "Абстрактные накладные"...
вот и все...
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580313
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делай отдельными таблицами, не ленись.
В будущем это тебя избавит от огромного гемора, если придется изменить-добавить поле, например ссылку на экспедитора в расходной - придется менять все что связано с обобщенной накладной, а так только с расходной.

И так далее.

Я сделал себе скрипт, создающий обобщенный документ, а дальше ручками добавляю-изменяю.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580325
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен c Denis___Ka
Накладные должны распологаться в одной таблице. В "заголовке" накладной имеется поле SRC_ID (источник) и DST_ID (получатель). Данные поля ссылаются либо на внутренние подразделения (складские организации), либо на внешних контрагентов.
В зависимоси от источника и получателя можно определить тип накладной:
внешний приход, внутренние приход (расход) и тд и тп. Конечно, можно и не осуществлять данный анализ, если вы хотите ввести доп поле тип накладной .
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580389
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем их складывать в одну таблицу, какой смысл кроме кажущейся красоты на первом этапе?

Начнем с того что уникальная нумерация будет сопряжена с типом документа, если нужны какието связи, придется вязать ее масу на себя итд итп.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580466
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimKa
Начнем с того что уникальная нумерация будет сопряжена с типом документа, если нужны какието связи, придется вязать ее масу на себя итд итп.

Подход уникальной нумерации в зависимости от типа документа и есть разделение накладных в отдельные таблицы.
При хранении в одной таблице уникальная нумерация (Primary Key) не зависит от типа накладной - она сквозная ....
Про связи - легче сделать их для одной таблицы, нежели повторять их (порой один в один дублировать) для нескольких...

Вообщем пусть каждый отставивает свою точку зрения - лично мое твердое убеждение - таблица должна быть одна. (даже имеется многолетний положительный опыт работы с такой структурой :-))) )
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580471
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен c Denis___Ka

Но различные поля вовсе необязательно выносить...

Пущай живут вместе, они друг другу не мешают... (тем более если их всего несколько)

У меня, например, весь расчет производится автоматически триггерами при занесении соответствующего признака...

Вот бы их писать их на четыре таблицы... или четыре ХП обработки...
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580543
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я говорю про связи между документами. В случае, если таких связей несколько, ваша таблица будет выглядеть клубком, если вообще возможно будет связать.

Сквозная нумерация по всем типам документов тем более не интересно - если завтра выйдет закон о сквозной нумерации накладных на отгрузку, как неоднократно было, что в такой структуре будете делать с Primary Key для всех документов?
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580560
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olol

У меня, например, весь расчет производится автоматически триггерами при занесении соответствующего признака...

Вот бы их писать их на четыре таблицы... или четыре ХП обработки...

Так они все равно для каждого документа свои, или у вас триггер делает одно и то же для всех документов?
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580567
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз:
Главная задача проектировщика - Добиться как можно большей степени нормализации используя как можно меньшее количество объектов
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580584
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimKa что в такой структуре будете делать с Primary Key для всех документов?

мы говорим о разных понятиях - номер документа и ID документа (сответственно PK ) . И в случае необходимости, никто не мешает вычислять номер документа (если это действительно НОМЕР) как max+1 для соответствующего типа накладной (в принципе можно для каждого типа накладной в отдельной табличке сохранять номер, затем считывать и инкрементировать - при этом на данную операцию будет расходоваться минимальное кол-во серверных ресурсов Это уже частности реализации).
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580715
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все же не вижу смысла вносить путаницу в структуру данных, выносить поля в отдельные таблицы, а основные держать в общей. Скажите хоть один довод за, или приведите пример, по производительности, или по удобству выборки и я замолчу :) Единственное удобство - если все проводки содержатся в документах а не отдельных регистрах, тогда одним простым селектом можно выбрать и приходы и расходы, к примеру. Но это годится только для примитивной системы.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580798
vooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimKaвыносить поля в отдельные таблицы
Структура накладных одна и та же , поэтому выносить поля в отдельные таблицы не
нужно. По поводу отдельной сквозной нумерации для каждой накладной и вынесения последнего номера для каждого типа в отдельную таблицу (денормализация) - это пример для экономии ресурсов сервера (этого можно и не делать и просто работать по max(Number)+1 )
УСЕ!!!
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32580984
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimKa
…если придется изменить-добавить поле,
…придется менять все что связано с обобщенной накладной, а так только с расходной.


Зачем менять другие формы ?
Ну добавил ты хоть 10 полей в один тип накладной, а причем тут другие ?

На других формах будут только те поля, с которыми они работают.
Одно другому не мешает.

TimKa
Так они все равно для каждого документа свои, или у вас триггер делает одно и то же для всех документов?

Конечно не один, а три: на INSERT,DELETE и UPDATE для всех документов.

И в зависимости от источника/получателя производятся соответствующие действия.

Правда, Источник/Получатель у меня тоже в одной таблице с соответствующим признаком…

А вот если они разбиты на несколько…, то тогда связки, конечно, усложняются…

vooo
…в отдельной табличке сохранять номер...

ID лучше брать не из таблички, а из генератора (для большей надежности).
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32581033
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot vooo]
Структура накладных одна и та же , поэтому выносить поля в отдельные таблицы не
нужно. [quot]

Пока не нужно. Пока не пришел началник и не попросил в отгрузочную добавить номер ГТД, к примеру.

По поводу денормализации спорить не буду, так как это вопрос тонкий - как хранить данные - в нормализованом виде или в куче, и не может служить аргументом, так как вопрос экономии вычислительных ресурсов при денормализации встает боком при обработке данных, и прогнозировать трудно, что будет проще для сервера. Я уж не говорю о целостности данных и прочем, отчего эта самая нормализация придумана старыми дядьками.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32581043
Фотография alex_ll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу плюсов объединения накладных в одну таблицу.
При проектировании каждой таблицы я ставлю вопрос: какие задачи решают объекты, содержащиеся в данной таблице. Для всех четырех таблиц у меня получаются 2 основные задачи :
1- изменение остатков на складе (на складах)
2- изменение текущего сальдо у контрагентов участвующих в операции
остальные производные от этих двух функций. Таким образом, суть объектов во всех четырех таблицах одна и та же. Логично объединить эти объекты (накладные) в одну таблицу. Вносить индивидуальные особенности, например, отдельной нумерации для каждого типа меня не затруднит. Меня интересовали как раз моменты, когда я сделал процентов 70 всех отчетов, и заказчик просит сделать что то, что гарантированно можно сделать только с извращениями в особо циничной форме : ). Именно о таких моментах я и спрашивал. По тому, как народ отвечает, таких ситуаций у тех, кто использует подобную структуру не возникало. Если я не прав – остановите меня, пока я не ушел слишком далеко. А то я уже ХП писать начал : ).
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32581065
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНа других формах будут только те поля, с которыми они работают.
Одно другому не мешает.

Насколько я понял, предлагается просто оставлять nulls или заранее условленные значения для тех полей что неиспользуются? Это очень плохой стиль, мне кажется, и гораздо безобразнее выглядит, чем отвести под каждый документ отдельную таблицу, если мы говорим о красоте


авторИ в зависимости от источника/получателя производятся соответствующие действия.

Значит, код в них все таки разный для разных документов. Ну и чем это отличается от того, что вы разнесете этот код по разным триггерам, вместо того чтобы громоздить эти CASE и IF ?

авторПравда, Источник/Получатель у меня тоже в одной таблице с соответствующим признаком…

Имеется ввиду, что один и тот же справочник? Это как раз не смертельно, хотя я бы разделил справочник складов и клиентов к примеру.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32581072
Фотография alex_ll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot TimKaЯ уж не говорю о целостности данных и прочем, отчего эта самая нормализация придумана старыми дядьками.[/quot]
Простите, а где я нормализацию нарушаю. Если в нумерации, то у меня требование к нумерации накладных каждый месяц начинать ее заново - так что в любом случае придется хранить номер следующей накладной. Обрабатывать накладные по таким номерам можно только по ключу номер-дата. А я таким ключам предпочитаю синтетические. Id в объединенний табличке и id в четырех раздельных особых различий не несут...
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32581124
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, а где я нормализацию нарушаю.
это vooo ответ был про денормализацию.

Вобщем, если структура менятся не будет, и вам не придется поддерживать эту базу, то делайте в одной таблице. Добавление одного поля в один из типов документов нарушит нормализацию, если говорить о ней, со всеми вытикающими гемороями.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32581315
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimKa
…оставлять nulls или… Это очень плохой стиль…
…безобразнее выглядит, чем отвести под каждый документ отдельную таблицу…


Если сейчас есть четыре типа накладных: приход, расход, возврат и перемещения между складами то, как быть в случае появления учета для фиктивных складов (например: учет в цехе со своими особенностями), где документы несколько отличаются от реальных складов?

Добавлять новые таблички для этих документов? (чтоб не было лишних полей с null).

Даже простой расход для внутреннего производства и продажу – тоже в разных табличках или указывать ‘пустого’ покупателя?

Это тоже самое - как каждый вид товара хранить в отдельной таблице…

TimKa
…громоздить эти CASE и IF ?

В любом случае, когда обрабатываешь перемещение со склада на склад, ты смотришь, откуда и куда и делаешь однотипные вычисления. Только для прихода будет нулевой расход (и наоборот).

alex_ll
…заказчик просит сделать что то, что гарантированно можно сделать только с извращениями в особо циничной форме…

Если для извращений необходимо будет заносить специальные данные с соответствующей обработкой, то когда все документы в одном месте, то достаточно им задать соответствующий признак, который будет общим для всех видов накладных и не надо будет для них создавать специальные таблицы.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32582149
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сейчас есть четыре типа накладных: приход, расход, возврат и перемещения между складами то, как быть в случае появления учета для фиктивных складов (например: учет в цехе со своими особенностями), где документы несколько отличаются от реальных складов?

Именно так и делается в нормальной системе учета имхо, одна производственная операция - один документ - одна система таблиц для хранения данного документа. Потому что понятие "несколько" весьма растяжимо, и под велением времени это "несколько" вырастает в ощутимую "сколько", а в результате у вас получится огромное табло с кучей нулов, зато одно, и один триггер с пятистами ветвлениями, в котором никто, кроме вас не разберется.

Другое дело, что никто не заставляет вас конструировать каждый раз эту систему таблиц вручную.

Остальное оставляю без коментариев, думаю, выше все рассказал :)
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32582202
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_llЕсть большой соблазн запихать это все в одну таблицу разделив только признаком тип накладной.
В результате эволюции нашей системы все мы пришли к выводу, что документы должны быть в ОДНОЙ таблице. Может быть, кроме только лишь каких-то извращенных. В новой версии именно так и будет. Завтра напишу плюсы этого, сейчас домой пора :).
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32582290
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы господа обсуждаете широко известные (по Фаулеру и не только) паттерны:
Наследование с одной таблицей, Наследование с таблицами для каждого класса и Наследование с таблицами для каждого конкретного класса. А мораль - здесь нет "лучшего" и/или "правильного" решения - для каждого отдельного приложения и проектировщика оно свое.
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32582364
TimKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы господа обсуждаете широко известные (по Фаулеру и не только) паттерны


Ага, зашел грамотный человек! Жалко что проходящий...

Где почитать про это?
...
Рейтинг: 0 / 0
Структура таблиц с накладными
    #32583257
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://martinfowler.com


Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
25 сообщений из 75, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц с накладными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]