Здравствуйте,
Допустим есть знакомая многим табличка OrderLines. Т.е. позиции заказов клиентов. Там соответсвенно колонки типа OrderlineID, OrderID, ProductID, Quantity и т.д.
Понадобилось добавить возможность работы с комментариями к каждой такой позиции. Например если дилер не поставил позицию, то можно добавить комментарий типа "SHORT 1 pc." (не хватает 1 шт.)
Решили что комментарий состоит из 2 частей: General Problem и непосредственно сам Comment. Например если дилер поставил по ошибке другую позицию, то в General Problem можно записать WRONG SUPPLY, а в Comment — "supplied part number AB3253456 instead of HF3465365".
Думаю задача понятна.
Вопрос в том — где хранить эти комментарии, прямо в таблице OrderLines или в отдельной таблице OrderLine_comments?
Первый вариант проще, я подозреваю здесь пару проблем:
1) Не все позиции будут иметь комментарии, а только малая часть. Соответственно добавление 2х колонок для хранения комментария может считаться ошибкой дизайна.
2) С таким подходом таблица OrderLines может значительно разбухать с развитием приложения. Но плохо ли это?
Во втором варианте (отдельная таблица OrderLine_comments) минус в более сложной работе c комментариями с точки зрения работы с базой данных. Например при отмене оприходования (надеюсь представляете что это значит) необходимо удалить комментарии со всех позиций входящих в счёт. Это усложняет процедуру отмены оприходования, т.к. надо будет в процедуру добавлять лишний запрос по удалению комментариев из таблицы OrderLine_comments.
Если бы комментарии были в таблице OrderLines, то можно было бы в одном запросе просто добавить Problem = '', Comment = ''.
Здравствуйте, MozgC, Вы писали:
MC>Вопрос в том — где хранить эти комментарии, прямо в таблице OrderLines или в отдельной таблице OrderLine_comments?
Можно и так и так.
MC>Первый вариант проще, я подозреваю здесь пару проблем: MC>1) Не все позиции будут иметь комментарии, а только малая часть. Соответственно добавление 2х колонок для хранения комментария может считаться ошибкой дизайна.
Нет.
MC>2) С таким подходом таблица OrderLines может значительно разбухать с развитием приложения. Но плохо ли это? MC>Во втором варианте (отдельная таблица OrderLine_comments) минус в более сложной работе c комментариями с точки зрения работы с базой данных. Например при отмене оприходования (надеюсь представляете что это значит) необходимо удалить комментарии со всех позиций входящих в счёт. Это усложняет
Что значит отмена оприходования?
процедуру отмены оприходования, т.к. надо будет в процедуру добавлять лишний запрос по удалению комментариев из таблицы OrderLine_comments. MC>Если бы комментарии были в таблице OrderLines, то можно было бы в одном запросе просто добавить Problem = '', Comment = ''.
Здравствуйте, _d_m_, Вы писали:
___>Что значит отмена оприходования?
Когда позиции приходят от поставщика, то поставленные позиции и их фактические цены (которые поставщик выставил в счете) забиваются в систему. Это называется оприходование. Иногда, к примеру, нужно вернуть позиции поставщику с отменой счета, тогда нужно "отменить оприходование" (не знаю как лучше по русски это сказать, по английски это undebit supplier invoice).
Здравствуйте, MozgC, Вы писали:
MC>Здравствуйте, _d_m_, Вы писали:
___>>Что значит отмена оприходования? MC>Когда позиции приходят от поставщика, то поставленные позиции и их фактические цены (которые поставщик выставил в счете) забиваются в систему. Это называется оприходование. Иногда, к примеру, нужно вернуть позиции поставщику с отменой счета, тогда нужно "отменить оприходование" (не знаю как лучше по русски это сказать, по английски это undebit supplier invoice).
Мне глубоко паралельно как это называется. Сами позиции счета удаляются или нет?
MC>Во втором варианте (отдельная таблица OrderLine_comments) минус в более сложной работе c комментариями с точки зрения работы с базой данных. Например при отмене оприходования (надеюсь представляете что это значит) необходимо удалить комментарии со всех позиций входящих в счёт. Это усложняет процедуру отмены оприходования, т.к. надо будет в процедуру добавлять лишний запрос по удалению комментариев из таблицы OrderLine_comments. MC>Если бы комментарии были в таблице OrderLines, то можно было бы в одном запросе просто добавить Problem = '', Comment = ''.
а зачем удалять-то, пусть хранится, хотя может у вас такая специфика, а в отчетах просто это не указывать. MC>Жду ваших советов. Заранее спасибо за помощь.
Если комментарий один, то не надо замарачиваться с отдельной таблицей, если же заказ проходит несколько стадий обработки, и на каждой стадии исполнитель может добавлять свои коментарии, то выносить в отдельную таблицу, по моемому это очевидно.
Я вот подумал, а не нарушает ли это 2/3 нормальную форму? Выше я писал про 2 колонки — General Problem и Comment, так вот Comment скорее описывает проблему (General Problem), чем саму позицию заказа (order line), а если так, то это нарушает 2 или 3 (всегда их путаю) нормальную форму. Что скажете?