Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Аналог субконто 1С в БД


Автор: Elfix 19.5.2011, 20:50
Доброго времени!

У меня возникла сложность с проектирование базы данных под следующую цель. Необходимо как то организовать таблицу PL и запрос SELECT к ней чтобы получить выборку такого вида:

Дата            Субконто1                                                   Субконто2                     Сумма
01.02.2001  Реализация товара                                     Контрагент 1                       -34593.00
01.02.2001  Аренда производственного помещения    Контрагент 1                       -349200.00
02.02.2001  Амортизация оборудования                       Оборудование 1                        -230.00
02.03.2001  Затраты на электроэнергию                      Контрагент 2                         -43298.00

Список контрагентов хранится в таблице contragents:

id int autoincrement
contragent_name VARCHAR(50)

Список оборудования в таблице equipments:

id int autoincrement
equipment_name VARCHAR(50)

Задача в том, чтобы хранить в полях субконто1 и субконто2 не текстовые значения, а ссылки на идентификаторы объектов из разных таблиц, а селектом каким-то образом показывать корректные значения.

Может быть криво выразился, но довольно трудно объяснить smile
В общем такое как то реализовано в 1С, когда поле может хранить в себе ссылку на объект из одной из таблиц.

Я так подразумеваю потребуется создать доп. поля типа ВидСубконто. Но не могу понять как тогда наиболее производительнее строить запрос SELECT?

Автор: Zloxa 19.5.2011, 20:58
rtfm [left] join

Автор: Elfix 19.5.2011, 21:06
Цитата(Zloxa @  19.5.2011,  20:58 Найти цитируемый пост)
rtfm [left] join 

Сложность в том, что ссылки в поле могут пересекаться, и простым LEFT JOIN сделать не получится, так как не понятно какую таблицу к какому полю цеплять, и уж тем более непонятно из какой таблицы подставлять значение: из оборудования или из контрагентов.

Просто в субконто2 может быть или контрагент или оборудование в зависимости от того какое значение приняло поле Субконто1.
Т. е. если Субконто1 Амортизация, тогда в субконто2 должно показываться оборудование которое самортизировалось, если же Субконто1 "Реализация товара", тогда нужно в Субконто2 показать покупателя из таблицы Контрагенты.

Автор: Zloxa 19.5.2011, 22:07
Цитата(Elfix @  19.5.2011,  21:06 Найти цитируемый пост)
как не понятно какую таблицу к какому полю цеплять, и уж тем более непонятно из какой таблицы подставлять значение

Если вам не понятно что к чему цеплять, то форум вам точно не поможет. Форум вам сможет помочь только если вы ему объясните критерии объединения.
Цитата(Elfix @  19.5.2011,  21:06 Найти цитируемый пост)
Т. е. если Субконто1 Амортизация, тогда в субконто2 должно показываться оборудование которое самортизировалось, если же Субконто1 "Реализация товара", тогда нужно в Субконто2 показать покупателя из таблицы Контрагенты. 

Тогда джойним и то и другое, а выводим, согласно описанной вами логики. Джойним внешним соединением.

Автор: Elfix 20.5.2011, 04:18
Цитата(Zloxa @  19.5.2011,  22:07 Найти цитируемый пост)
Тогда джойним и то и другое, а выводим, согласно описанной вами логики. Джойним внешним соединением.
А если в субконто будет значение не из двух таблиц а из 20? А если в основной таблице будет не два поля субконто, а четыре или пять? Тогда к каждому полю субконто придется джойнить около 20 раз в зависимости от таблиц, а потом еще CASE'ом формировать сложные условия для каждого поля субконто...

У меня собственно говоря вопрос в том как более эффективно организовать данные? С точки зрения производительности и с точки зрения обслуживания базы ( в том плане, если добавится еще таблица с возможными значениями субконто, придется добавлять условия в селект).

Автор: Zloxa 20.5.2011, 08:48
Цитата(Elfix @  20.5.2011,  04:18 Найти цитируемый пост)
У меня собственно говоря вопрос в том как более эффективно организовать данные? 

Выделить одну сущность - субконто, наделить ее необходимыми атрибутами. Расширенные наборы свойств, специфичные для различного рода субконто вынести в отдельные сущности, находящиеся в отношении 1:1 с сущностью "субконто".

Мне вообще не понятно в чем сложность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)