Где хранить комментарии к OrderLines?
От: MozgC США http://nightcoder.livejournal.com
Дата: 19.11.08 00:18
Оценка:
Здравствуйте,
Допустим есть знакомая многим табличка 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 = ''.

Жду ваших советов. Заранее спасибо за помощь.
Re: Где хранить комментарии к OrderLines?
От: _d_m_  
Дата: 19.11.08 00:40
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Вопрос в том — где хранить эти комментарии, прямо в таблице OrderLines или в отдельной таблице OrderLine_comments?


Можно и так и так.

MC>Первый вариант проще, я подозреваю здесь пару проблем:

MC>1) Не все позиции будут иметь комментарии, а только малая часть. Соответственно добавление 2х колонок для хранения комментария может считаться ошибкой дизайна.

Нет.

MC>2) С таким подходом таблица OrderLines может значительно разбухать с развитием приложения. Но плохо ли это?

MC>Во втором варианте (отдельная таблица OrderLine_comments) минус в более сложной работе c комментариями с точки зрения работы с базой данных. Например при отмене оприходования (надеюсь представляете что это значит) необходимо удалить комментарии со всех позиций входящих в счёт. Это усложняет

Что значит отмена оприходования?

процедуру отмены оприходования, т.к. надо будет в процедуру добавлять лишний запрос по удалению комментариев из таблицы OrderLine_comments.
MC>Если бы комментарии были в таблице OrderLines, то можно было бы в одном запросе просто добавить Problem = '', Comment = ''.

Лучше так: Problem = null, Comment = null
Re[2]: Где хранить комментарии к OrderLines?
От: MozgC США http://nightcoder.livejournal.com
Дата: 19.11.08 07:26
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Что значит отмена оприходования?

Когда позиции приходят от поставщика, то поставленные позиции и их фактические цены (которые поставщик выставил в счете) забиваются в систему. Это называется оприходование. Иногда, к примеру, нужно вернуть позиции поставщику с отменой счета, тогда нужно "отменить оприходование" (не знаю как лучше по русски это сказать, по английски это undebit supplier invoice).
Re[3]: Где хранить комментарии к OrderLines?
От: _d_m_  
Дата: 20.11.08 00:25
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Здравствуйте, _d_m_, Вы писали:


___>>Что значит отмена оприходования?

MC>Когда позиции приходят от поставщика, то поставленные позиции и их фактические цены (которые поставщик выставил в счете) забиваются в систему. Это называется оприходование. Иногда, к примеру, нужно вернуть позиции поставщику с отменой счета, тогда нужно "отменить оприходование" (не знаю как лучше по русски это сказать, по английски это undebit supplier invoice).

Мне глубоко паралельно как это называется. Сами позиции счета удаляются или нет?
Re[4]: Где хранить комментарии к OrderLines?
От: MozgC США http://nightcoder.livejournal.com
Дата: 20.11.08 02:47
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Сами позиции счета удаляются или нет?


нет.
Re[5]: Где хранить комментарии к OrderLines?
От: _d_m_  
Дата: 20.11.08 04:57
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Здравствуйте, _d_m_, Вы писали:


___>>Сами позиции счета удаляются или нет?


MC>нет.


Делай в одной таблице и не заморачивайся, например, поле типа [n]varchar(128)
Re: Где хранить комментарии к OrderLines?
От: cadet354 Россия
Дата: 20.11.08 07:22
Оценка: 5 (1)
Здравствуйте, MozgC, Вы писали:


MC>Во втором варианте (отдельная таблица OrderLine_comments) минус в более сложной работе c комментариями с точки зрения работы с базой данных. Например при отмене оприходования (надеюсь представляете что это значит) необходимо удалить комментарии со всех позиций входящих в счёт. Это усложняет процедуру отмены оприходования, т.к. надо будет в процедуру добавлять лишний запрос по удалению комментариев из таблицы OrderLine_comments.

MC>Если бы комментарии были в таблице OrderLines, то можно было бы в одном запросе просто добавить Problem = '', Comment = ''.
а зачем удалять-то, пусть хранится, хотя может у вас такая специфика, а в отчетах просто это не указывать.
MC>Жду ваших советов. Заранее спасибо за помощь.
Если комментарий один, то не надо замарачиваться с отдельной таблицей, если же заказ проходит несколько стадий обработки, и на каждой стадии исполнитель может добавлять свои коментарии, то выносить в отдельную таблицу, по моемому это очевидно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Где хранить комментарии к OrderLines?
От: MozgC США http://nightcoder.livejournal.com
Дата: 05.01.09 01:44
Оценка:
Я вот подумал, а не нарушает ли это 2/3 нормальную форму? Выше я писал про 2 колонки — General Problem и Comment, так вот Comment скорее описывает проблему (General Problem), чем саму позицию заказа (order line), а если так, то это нарушает 2 или 3 (всегда их путаю) нормальную форму. Что скажете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.