|
|
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
Добрый день всем !!! Есть много разных документов. Документы будут строится по принципу "Шапка документа->Строки документа". Вопрос: варианты построения общего журнала документов: 1. Вью с объединением нужных полей таблиц-шапок 2. Отдельная таблица с примерно следующими полями: идентификатор, дата документа, тип документа, владлец, сумма. Идентификатор этой таблицы "ссылается" на нужную таблицу-шапку документа. Вот не могу выбрать.. Вроде бы с точки разработчика 1 вариант удобнее и легче. Захотел новый документ добавить - переделал вью и все. Захотел поля изменить - пожалуйста. Но вот объединение - будут ли индексы отрабатывать и использовании условий ? Большие объемы документов не вызовут "тормозов" при объединении ? Во втором варианте тоже - физическая таблица с правильно построенными индексами предполагает хорошое будущее, но усложняет процесс разработки и сопровождения.. Что посоветуете ? Может есть еще какой-то вариант ? Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 16:37 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
Какого плана приложение ? Например для торгово-складской системы можно все посадить в одну пару таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 19:07 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
Casper_ Идентификатор этой таблицы "ссылается" на нужную таблицу-шапку документа. Вот это плохо. Casper_ Вроде бы с точки разработчика 1 вариант удобнее и легче. Захотел новый документ добавить - переделал вью и все. Захотел поля изменить - пожалуйста. Хм. Носиться по каждому чиху что-то переделывать.... View из 128-ми union all-ов.... перспектива слияния изменений, сделанных в этом view "командой, модифицирующей документ номер двенадцать" и "командой, модифицирующей документ номер восемьдесят два".... Casper_ Но вот объединение - будут ли индексы отрабатывать и использовании условий ? Большие объемы документов не вызовут "тормозов" при объединении ? Этот вопрос не стоит задавать вне контекста конкретной СУБД. Casper_ Во втором варианте тоже - физическая таблица с правильно построенными индексами предполагает хорошое будущее, но усложняет процесс разработки и сопровождения.. Хм. Чем? Casper_ Что посоветуете ? Может есть еще какой-то вариант ? 1. Таблица Com$Documents. Содержит "общие поля" документов - типа тех, что Вы перечислили. 2. Таблица "Документы типа 1". Ссылается на Com$Documents один к одному. Содержит поля, специфичные для этого типа документов. 3. Таблица "Документы типа 2". Ссылается на Com$Documents один к одному... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 21:48 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
Это типичная реализация наследования. Есть два основных варианта: 1) - реализация наследования в виде связи 1-к-1 (атрибуты не дублируются в производных классах/таблицах ) Для вывода общего журнала документов делается простой select из главной(родительской) таблицы. Document(ID, Date) FinDocument(ID, Sum, ...) связан 1-к-1 с Document по ID. 2) - реализация наследования, когда атрибуты родительского класса/таблицы дублируются в производных. В этом варианте для построения общего журнала документов создается view с union all всех таблиц и общими атрибутами. Document(ID, Date) FinDocument(ID, Date, Sum) нет связей с Document, ID должен быть уникален в пределах БД. select ID, Date from Document union all select ID, Date from FinDocument union all ... Минусы первого варианта - производительность (таблица Document разрастается, необходимость множества join-ов (зависит от уровня наследования) начинает влиять на производительность) Минусы второго - и в сопровождении (например, необходимо расширить родительский класс доп. атрибутом, тогда придется это сделать для всех производных классов), и в том что с точки зрения "реляционности" это не совсем красиво смотрится. Я, со своей стороны рекомендовал бы при начальном проектировании или на начальной стадии проекта использовать всегда 1-ый вариант, а в последствии, если возникают проблемы с производительностью, переходить ко второму варианту, но только когда это действительно необходимо. Таким образом, ничто не мешает комбинировать эти два подхода, что я c успехом и делаю :). При этом, подобный редизайн можно даже возложить на dba, если предоставить ему детальную road-map на случай падения производительности в подобных схемах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 22:10 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
Благодарю всех за ответы.. И так, насколько я понял, приемлен примерно такой вариант: Есть таблица ОбщЖурДок с полями DocID, Date, Owner, Sum и т.д. Есть Док1 с полями DocID, (специфические поля документа) Есть Док1_Строки с полями StrID, DocID, (специфические поля строк) Есть Док2 с полями DocID, (специфические поля документа) Есть Док2_Строки с полями StrID, DocID, (специфические поля строк) Есть ДокN с полями DocID, (специфические поля документа) Есть ДокN_Строки с полями StrID, DocID, (специфические поля строк) ОбщЖурДок связан с ДокN 1->1 (ОбщЖурДок.DocID->ДокN.DocID), ДокN связан с ДокN_Строки 1->ко многим (ДокN.DocID->ДокN_Строки.DocID) От создания вью с объединение всех таблиц ДокN желательно отказаться. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2007, 10:20 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
ОбщЖурДок связан с ДокN 1->1 (ОбщЖурДок.DocID->ДокN.DocID), только связь в другую сторону...: ДокN связан с ОбщЖурДок 1->1 (ДокN.DocID(PK) -> ОбщЖурДок.DocID(PK)), ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2007, 10:38 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
Немножко разовью тему Пользователи хотят в общем журнале видеть отдельно колонку сумма по разным документам, но вся фишка в том что: 1. В "поступлении товаров" эта величина - сумма колонки по табличной части документа 2. В "приходный кассовый ордер" это поле шапки документа 3. В "приказ на цены" эта колонка не заполняется, как не имеющая смысла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2007, 13:06 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
NafПользователи хотят в общем журнале видеть отдельно колонку сумма по разным документам, Нормально. Naf но вся фишка в том что: 1. В "поступлении товаров" эта величина - сумма колонки по табличной части документа 2. В "приходный кассовый ордер" это поле шапки документа А кто и зачем так спроектировал? Надо объяснить ему, что не мешало бы думать об общих концепциях программирования. Раз уж, как совершенно справедливо заметили, мы реализуем наследование, давайте и дальше говорить в терминах ООП. Итак, у нас есть общий атрибут - цена/сумма документа. У него есть разные реализации для разных документов - полиморфизм в действии. Что делает правильный объект в такой ситуации? Правильно, он инкапсулирует свои особенности. Наружу выставляется стандартный интерфейс, а "особенная реализация для этого случая" - дело внутренней реализации. Как это применить в данном случае? Наиболее естественный имхо подход - иметь в "общей таблице" соответствующее поле, которое в "поступлении товара" использовать как есть, в "приходном кассовом ордере" автоматически заполнять суммой по позициям, а в остальных документах - как им нужно. Naf3. В "приказ на цены" эта колонка не заполняется, как не имеющая смысла И? Разве null-ы уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2007, 17:14 |
|
||
|
Журнал документов - view или таблица
|
|||
|---|---|---|---|
|
#18+
А как быть например, если надо в журнале отобразить поле комментарий. Если использовать подход - Отдельная таблица для определенных документов, то придется дублировать поле комментарий и в ней тоже, что повлечет за собой избыточность (комментарий есть и в таблице документа и в журнале). Как быть в этой ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2008, 23:42 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=100&tid=1543722]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 439ms |

| 0 / 0 |
