Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог субконто 1С в БД, Не могу понять как спроектировать базу 
:(
    Опции темы
Elfix
Дата 19.5.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



Доброго времени!

У меня возникла сложность с проектирование базы данных под следующую цель. Необходимо как то организовать таблицу 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?
PM MAIL   Вверх
Zloxa
Дата 19.5.2011, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



rtfm [left] join


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Elfix
Дата 19.5.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



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

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

Просто в субконто2 может быть или контрагент или оборудование в зависимости от того какое значение приняло поле Субконто1.
Т. е. если Субконто1 Амортизация, тогда в субконто2 должно показываться оборудование которое самортизировалось, если же Субконто1 "Реализация товара", тогда нужно в Субконто2 показать покупателя из таблицы Контрагенты.
PM MAIL   Вверх
Zloxa
Дата 19.5.2011, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



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

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

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

Это сообщение отредактировал(а) Zloxa - 19.5.2011, 22:07


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Elfix
Дата 20.5.2011, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



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

У меня собственно говоря вопрос в том как более эффективно организовать данные? С точки зрения производительности и с точки зрения обслуживания базы ( в том плане, если добавится еще таблица с возможными значениями субконто, придется добавлять условия в селект).
PM MAIL   Вверх
Zloxa
Дата 20.5.2011, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



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

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

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.