|
|
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
IzyaОпять таки, я не настаиваю. Если я 100% буду уверен, что описание товара не поменяется, я сам первый через ссылки сделаю. Но личный опыт - ровно наоборот. Пытался сделать через ссылки, но повылазили грабли, а переделка на копирование оказалась быстрым и эффективным решением.а как ваш личный опыт подсказывает отчет по доходности продаж строить например? будете брать кипу приходных и расходных накладных и с помощью озарения хитрых алгоритмов определять какая копия какой соответствует? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 19:39 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Izya, ... а мне уже показалось, что здесь только ЧАЛ один во всем понимает... :) На самом деле, вопрос с переименованием товара в каталоге и копированием в заказ - куда как более серъезный. Это то самое "отсутствие связей в РМД", которое приходится всегда делать ручками в ЯП, использующем РСУБД. И это - основной "косяк" М5 связей как не было, так и нет... Копировать приходится, потому что другого пути - нет. Прайс-лист (каталог товаров) и заказ - это РАЗНЫЕ Сущности и ссылаются они на разные свойства разных товаров (хотя и кажется что вроде одно и то же)... ваш пример - как раз попытка объяснить это... "версионность параметров", "ведение истории изменений", "архивирование", "..." -- это всё нужные элементы серьезных учетных систем, но вовсе не для забивания ими гвоздей. В противном случае, оно так и получается: "а куда ссылку, не в историю же"... конечно нет, история нужна для других целей, а вовсе не для того, чтобы в ней при каждом чихе искать чего ни попадя... ... забавно, что столько людей, знающих такие вумные термины, способные так красиво писать "пшелнах" ... на самом деле - фик... понимания как у второклассников. Всё что здесь продемонстрировано - это: а) полное неумение вести дискуссию б) невоспитанность в) проф. неграмотность. P.S. Кстати, насколько помню, в 1С реализован первый вариант "камасутр". :) Итого, моё предложение ТС-у: 1. Каталог товаров - это, по сути, ваш "прайс-лист". Как и чего в нём названо, сколько стоит, какими ещё параметрами обладает - пофиг. Не играет никакой роли. Отсюда можно удалять, править "всё что угодно"... можете вести версионность, историю изменений (если хочется). Он нужен "для показу" (справочник или витрина вашей БД). 2. Заказы (строчная часть документа, есть ещё и шапка). Сюда копируете(это нормально и дает самое быстрое решение на всех этапах как работы так и последующего развития системы) все значимые параметры из каталога товаров, которые могут быть использованы для дальнейшей работы с документами, статистикой продаж и т.д. Если сильно хотите 3НФ - сделайте отдельно(!) таблицу "проданные товары" и ссылайтесь в строчках заказов на неё. Но никак не на исходный каталог. Заметьте, что тут УЖЕ нет ни истории, ни версионности, ни удалений. Это УЖЕ проданные товары. Поезд ушел. В лучшем случае, можно добавить "архивирование" и удаление ошибочной продажи - сторно (и то осторожно). Как вариант (это решение хуже) - можете ввести признак в исходный каталог "продано" и вести все заказанные/проданные товары в одной таблице. Почему хуже - предлагаю обдумать на досуге самостоятельно. 3. Все дальнейшие "телодвижения" с проданными товарами - к исходному каталогу не имеют никакого отношения. Вы, тем не менее можете хранить ссылку на запись исходного каталога как справочную (было выписано отсюда)... но и только. Использовать далее (в расчетах, выписках и т.д.) можно только то, что было скопировано в момент создания первичного документу (транзакционность операции должна быть).. в противном случае - долгое и нудное вылавливание багов - вы себе гарантируете (некоторые их ловят до сих пор как показывает обсуждение тут). 4. Аналогично, поступаете и с обратной стороны - снабжения и соответственно склада: каталог входящих товаров (а равно и склад и приходные документы) - к результирующему прайс-листу (вашему каталогу для показу) - НЕ ИМЕЕТ. Это также разные Сущности. Только в этом случае, у Вас будет возможность правильно распределить заказ на Поставщиков, даже с разными наименованиями, правильно вести статистику учета приходов и т.д... ... и опять, заметьте - нет тут ни истории, ни версионности... это УЖЕ купленные товары. Поезд опять ушел. В лучшем случае, можно разрешить удаление ошибочной закупки и архивирование. Ограничения - теже что и с продажей. Ваш "каталог товаров" - это среднее, связующее звено между Сущностями поставок и Сущностями продаж ... вот тут нужна история и версионность параметров в общем виде... ... если бы в РМД были Связи - можно было бы воспользоваться ими. Но их нет. Так что - копировать ручками. Удачи! и поменьше читайте ерунду предлагаемую как "так точно правильно". К этой рекомендации - относится также (мало ли какая у Вас задача на самом деле). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 20:19 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Arhat109Кот Матроскин, ну и? несмешное (и простое, на уровне курсовика) решение то ТС-у кто-нить даст? Не знаю термина "простое на уровне курсовика". Либо у нас в scop'е есть требование хранить историю изменений, либо нет. Если есть - надо его делать, нормально, а не половинчато. Если нет - вообще и вопроса нет. Arhat109... а там у него ещё и прямой вопрос про удаление товаров из каталога был... :) и ему на него ответили почти сразу - товары из каталога удалять не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 21:20 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
обсуждение бреда, ИМХО, не дискуссия... много букв - не означает обилие аргументов знание терминов умных слов не доказывает понимание предмета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 21:59 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Автор темы и не знал до чего она может разрастись:) Однако, разрастание почему-то не дошло до такой хорошо известной функциональности, как партионный учет. При его полноценной реализации, формально, можно обойтись без истории и денормализации (в виде переноса свойств товара в заказ). Ведь в партии товара можно хранить наименование поставщика. В заказе вы можете, во-первых, указать один и тот же товар в разных записях и продать его по разным ценам. При печати документов вы можете просто задать параметр "печать наименований партий", например. А можете печатать стандартное наименование товара. И не нужно ничего "перетаскивать". В случае полноценного партионного учета запись отгрузки так и так имеет детализацию (1:М), в которой указаны конкретные партии. Разумеется, можно завести-таки в заказе свойство, которое по умолчанию содержит наименование товара, но может быть изменено (значение именно этого свойства и печатается в документе). Более того, чего не сделаешь ради клиента, можно и в детализации записи для каждой партии применить такой же механизм. Более того, можно в БД хранить для каждого товара его специфическое название для конкретного покупателя:) Более того, и т.д. Но, если это не просто товар, а изделие, то у него есть спецификация, технологический процесс, паспорт качества с определенными характеристиками и т.п. И все это может быть востребовано, когда заказ уже создан. Так что связь между "заказом" и "товаром", конечно, есть:) И историю изменений, конечно, можно поддерживать и использовать, при необходимости. В общем, скорее всего, просто не понимали друг друга спорщики. Не вижу предмета для спора. Или, во всяком случае, для принципиального спора:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 22:09 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Бредятина, тока надо заметить, что структура проектного решения уже сильно отличается от двух таблиц... :) то самое решение, о котором был спор и смех - как раз ограничивалось ими. И, как ни странно, ни один оппонент никакого другого решения - так и не привел. Так что спора не было. Был проф.непригодный треп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 23:01 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
13729640 На этом вопрос автора был исчерпан. Можно было просто порекомендовать хранить наименование товара еще и в заказе. Хотя автор и не утверждал, что оно там не хранится, он лишь сообщил, что в заказе есть идентификатор товара. И он там, действительно, должен быть, если уж связь моделируется с помощью механизма ключей:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2013, 23:26 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Бредятина, верно, именно с этой рекомендации треп и начался... пришлось защищать рекомендацию полноценно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 06:17 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Arhat109Дык, вот ситуацию с переименованием названия в этом самом "правильном каталоге" и рассматриваем! Все очень просто: если это ошибка - она исправляется, что делать с ошибочными документами - вопрос второй. Если объект изменяет свое св-во (любое), то старое сохраняется в истории. Все старые документы останутся неизменными. Что вы ломитесь в открытую дверь, все это давным давно во всех нормальных системах сделано. А ваш подход - это 60-ые годы прошлого века. Тут даже обсуждать нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 09:26 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
_модВсе очень просто: если это ошибка - она исправляется, что делать с ошибочными документами - вопрос второй. Если объект изменяет свое св-во (любое), то старое сохраняется в истории. Все старые документы останутся неизменными. Что вы ломитесь в открытую дверь, все это давным давно во всех нормальных системах сделано. А ваш подход - это 60-ые годы прошлого века. Тут даже обсуждать нечего.+1 креативщики... автоматизируют ошибки юзеров и фальсификацию учетных документов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 09:30 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
IzyaПытался сделать через ссылки, но повылазили грабли, а переделка на копирование оказалась быстрым и эффективным решением. Это не решение. Т.е. искали под фонарем, хотя потеряли совсем в другом месте. См. задачку: расчитать доход от продажи товара Х (ессно независимо от его переименования) зы следуя этой экзотической логике все ссылки надо заменить на полный набор св-в соответ. объекта. Ну, ну, вперед и с песнями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 09:33 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин и ему на него ответили почти сразу - товары из каталога удалять не надо. Нормальная система просто не позволит это сделать либо на уровне ОЦ, либо на прикладном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 09:40 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
_модСм. задачку: расчитать доход от продажи товара Х (ессно независимо от его переименования) Да все аналитические отчеты накроются - зависимость обьемов продаж от времени года, от маркетинговых программ, etc. Ладно отчеты - автоматизация комплектации заказа и то начинает представлять сложности. Т.е. это решение худо-бедно работает для "полсотни позиций в каталоге и 10 единиц на складе ( в коробке из-под сникерсов), а через полгода все равно прогорим и кому нужны будут отчеты". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 10:43 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
продолжаем веселиться. Часть три. :) _модArhat109Дык, вот ситуацию с переименованием названия в этом самом "правильном каталоге" и рассматриваем! Все очень просто: если это ошибка - она исправляется, что делать с ошибочными документами - вопрос второй. Если объект изменяет свое св-во (любое), то старое сохраняется в истории. Все старые документы останутся неизменными. Что вы ломитесь в открытую дверь, все это давным давно во всех нормальных системах сделано. А ваш подход - это 60-ые годы прошлого века. Тут даже обсуждать нечего. Да ну? Если (как указано у ТС) ссылка заказа смотрит в единственный каталог товаров , то чем поможет Вам то, что старое значение Вы положили в историю ?!? Чтобы такое работало (камасутра, вариант 3) , Вам надо переназначить ссылку на название в заказе на запись о товаре в таблице истории... а это уже совсем другая ссылка (вплоть до динамического SQL)... или изначально вести историю в таблице каталога (база - пухнет, запросы тормозят и усложняются - потому как всё время приходится шариться в истории де факто)... или изначально направлять ссылку из заказа в таблицу истории пихая туда сразу и текущий элемент каталога... когда пихать элемент каталога в "историю"? а) сразу при создании элемента -- вариант с историей прямо в каталоге, даже логичнее будет. б) в момент создания заказа -- угу, код растет, а с ростом количества документов... в) ваш вариант? ... сравните по стоимости, надежности и долговечности с предложенным вариантом... какой проще в реализации, сопровождении... и т.д. Итог вашего подхода: "лох должен платить". ... ну и просветите по второму вопросу, в частности "Что делать с ошибочными документами, по которым уже проведена оплата/заключен договор?", особенно для случая систематической ошибки: "изменение наименования поставщиком". Вот так, ошибка проектировщика вылезает геммороем кодерам, бухгалтерам и всем остальным. Правильно. Самый верный вариант камасутры - первый (идите нахрен Василий), в смысле совсем, пишите свои документы в Excel, или ваще перьевой ручкой... вот такие современные решения, оказывается. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 10:47 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Забавная фантазия... эту строчку все значимые параметры из каталога товаров, которые могут быть использованы для дальнейшей работы с документами, статистикой продаж и т.д. Если сильно хотите 3НФ - сделайте отдельно(!) таблицу "проданные товары" и ссылайтесь в строчках заказов на неё. Но никак не на исходный каталог. пропустили, читая "по-диагонали", нет? Если нет, то объяснить соостевтвие написанного Вами этой строке сможете? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 10:51 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Arhat109Кот Матроскин, Забавная фантазия... эту строчку + все значимые параметры из каталога товаров, которые могут быть использованы для дальнейшей работы с документами, статистикой продаж и т.д. Если сильно хотите 3НФ - сделайте отдельно(!) таблицу "проданные товары" и ссылайтесь в строчках заказов на неё. Но никак не на исходный каталог. пропустили, читая "по-диагонали", нет? Если нет, то объяснить соостевтвие написанного Вами этой строке сможете? :) Давайте Вы сами будете толковать написанное Вами? Опишите механизм, как происходит работа с этой Вашей таблицей "проданные товары", в какой момент туда попадают данные, с какими таблицами она связана, как помогает построить отчет "Зависимость продаж товара Х от времени года независимо от переименований ", etc. - тогда можно буджет что-то обсуждать. Пока у меня впечатление, что эту таблицу Вы никогда нигде не рализовавывали, придумали прямо вчера, поэтому сами не до конца представляете, что это и к чему. Если ошибаюсь - ну отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 11:13 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Arhat109Да ну? Если (как указано у ТС) ссылка заказа смотрит в единственный каталог товаров , то чем поможет Вам то, что старое значение Вы положили в историю ?!? За парту и учиться. Если вы даже это не знаете, то говорить не о чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 11:45 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
_модArhat109Да ну? Если (как указано у ТС) ссылка заказа смотрит в единственный каталог товаров , то чем поможет Вам то, что старое значение Вы положили в историю ?!? За парту и учиться. Если вы даже это не знаете, то говорить не о чем. Вы б, товарищ Кот, вместо призывов учиться предложили бы наконец что-то внятное по случаю редактирования и переименования. Лочить при продаже for update товар в каталоге мне кажется Бредятиной; хотя, быть может, кому-то это и нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 11:58 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
_модIzyaПытался сделать через ссылки, но повылазили грабли, а переделка на копирование оказалась быстрым и эффективным решением. Это не решение. Т.е. искали под фонарем, хотя потеряли совсем в другом месте. См. задачку: расчитать доход от продажи товара Х (ессно независимо от его переименования) зы следуя этой экзотической логике все ссылки надо заменить на полный набор св-в соответ. объекта. Ну, ну, вперед и с песнями. Я чё то офигеваю от вас, ребяты ) У товара есть название, и есть уникальный идентификатор, например, EAN. (Хотя у меня был случай когда под новый год пришел товар в праздничной упаковке, которая для покупателя была явно другим товаром, но EAN сохранился). Может быть и не EAN. Предполагается, что ID товара не меняется со временем. В строках отгруженных заказов он. конечно, есть, но не как foreign key на товары. Интерфейсно, пользователю я это ID менять, конечно, не даю. Вот я этому ID я и группирую (взяв LAST() по названию, например), и даже могу связать по нему с таблицей товаров каким нить LEFT JOINOM, что б, если найдется, взять название оттуда. В общем с аналитикой никаких проблем. ...А вы чё, правда по названию группируете? Ну-ну... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 11:59 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
КМК вы здесь слово ссылка воспринимаете очень уж буквально. Все-таки это не ссылка, как в ОО языках, а внешний ключ, т.е. ассоциация. А здесь КМК случай, когда изначально стоит условие, что эта ассоциация не должна быть настолько жесткой, как внешний ключ. Поэтому приходится реализовывать либо более мягкие механизмы на прикладном интерфейсном уровне, либо, если надо, историю делать. Жаркий спор, непонятно о чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 12:10 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
U-geneлибо, если надо, историю делать. Ессно историю, только делать это надо правильно с сохранением ID. Тогда и FK работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 12:31 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
_модU-geneлибо, если надо, историю делать. Ессно историю, только делать это надо правильно с сохранением ID. Тогда и FK работает.Насчет "надо" не уверен. У меня был случай, что сначала был FK (хотя названия в строки отгрузок всё равно копировали :) ), потом решили старые товары убить, и стали работать без FK (что б первичку многолетней давности можно было печатать). Работа это все долго и без проблем. Это я к тому, что настаивать на существование изначально "правильных" решений, которые единственно и "надо" делать, мне кажется неправильно. PS. Забавно, кстати, что в какой то момент по той таблице строк отгрузок был сделан простенький отчет "переимования":) Пользовались им раза 2-3, не больше. PPS. Вы б видели как это в Навижн решено. Там контроль целостности между таблицами сделан на уровне приложения очень криво и с жуткими тормозами. Вы тут все академики, по сравнению с теми ребятами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 12:59 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
U-gene ...потом решили старые товары убить А в чем был мотив такого решения? Сэкономить дискового пространства на пару долларов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 13:22 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
Спор ни о чем. Все зависит от конкретных условий работы и требований бизнеса. PS. Хотя в этом случае я за де нормализацию, и вообще ни вижу ничего плохого в де нормализации, если это делать очень осторожно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 13:22 |
|
||
|
Как правильно хранить данные
|
|||
|---|---|---|---|
|
#18+
U-geneУ меня был случай, что сначала был FK (хотя названия в строки отгрузок всё равно копировали :) ), потом решили старые товары убить, и стали работать без FK (что б первичку многолетней давности можно было печатать). Работа это все долго и без проблем.это - чудо! а что еще, кроме печати первички, могла делать система? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 13:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38104496&tid=1541395]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
184ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 473ms |

| 0 / 0 |
