powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как это можно спроектировать... ?
11 сообщений из 11, страница 1 из 1
Как это можно спроектировать... ?
    #37859477
ochelot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!

Имеется одна задача, но не пойму как можно правильно составить таблицы и связи...

У нас имеется "клиент" , "товар" и "спеццена"

У "товара" есть "группа" в которую он входит
У "клиента" есть "спеццена" на определенный "товар" или на всю "группу" "товара"

Например:
(группа и товар входящий в группу)
ДВЕРИ МЕТАЛЛИЧЕСКИЕ
дверь стальная Россия
дверь стальная Польша
...
Клиент1 имеет спеццену в 1000р. на "дверь стальную Россия"
Клиент2 имеет спеццену в 900р. на группу "ДВЕРИ МЕТАЛЛИЧЕСКИЕ"

А вывод данных запроса должен быть типа:

Клиент1 ДВЕРИ МЕТАЛЛИЧЕСКИЕ
дверь стальная Россия 1000р.
Клиент2 ДВЕРИ МЕТАЛЛИЧЕСКИЕ 900р.

т.е. получается если у клиента спеццена только на определенный товар то выводиться группа товара и сам товар на который спеццена, а если у клиента на всю группу товара спеццена то выводятся только группа.

Например:
Клиент1 ДВЕРИ МЕТАЛЛИЧЕСКИЕ
дверь стальная Россия 1000р.
ОБОИ
обои бумажные 400р.
обои виниловые 500р.
КЕРАМОГРАНИТ 700р.
Клиент2 ДВЕРИ МЕТАЛЛИЧЕСКИЕ 900р.
ОБОИ
обои бумажные 400р.

Как должны выглядеть таблицы для такой задачи?
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37859482
ochelot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не пойму почему пробелы "Съелись" подобие таблицы не видно
Добрый вечер!

Имеется одна задача, но не пойму как можно правильно составить таблицы и связи...

У нас имеется "клиент" , "товар" и "спеццена"

У "товара" есть "группа" в которую он входит
У "клиента" есть "спеццена" на определенный "товар" или на всю "группу" "товара"

Например:
(группа и товар входящий в группу)
ДВЕРИ МЕТАЛЛИЧЕСКИЕ; ;;дверь стальная Россия ;;дверь стальная Польша
...
Клиент1 имеет спеццену в 1000р. на "дверь стальную Россия"
Клиент2 имеет спеццену в 900р. на группу "ДВЕРИ МЕТАЛЛИЧЕСКИЕ"

А вывод данных запроса должен быть типа:
Клиент1; ДВЕРИ МЕТАЛЛИЧЕСКИЕ; ;; дверь стальная Россия ; 1000р.;Клиент2 ; ДВЕРИ МЕТАЛЛИЧЕСКИЕ ; 900р.;
т.е. получается если у клиента спеццена только на определенный товар то выводиться группа товара и сам товар на который спеццена, а если у клиента на всю группу товара спеццена то выводятся только группа.

Например:
Клиент1 ; ДВЕРИ МЕТАЛЛИЧЕСКИЕ; ;; дверь стальная Россия ; 1000р. ;; ОБОИ ;; обои бумажные ; 400р. ;; обои виниловые ; 500р. ;; КЕРАМОГРАНИТ ; 700р.Клиент2 ; ДВЕРИ МЕТАЛЛИЧЕСКИЕ ; 900р. ; ОБОИ; ;; обои бумажные ; 400р.
Как должны выглядеть таблицы для такой задачи?
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37859643
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас цена может быть и на всю группу товаров и на отдельные товары, то таблицы такие:

Справочник ГруппыТоваров (ГруппаТоваров)
Таблица Товары (ГруппаТоваров, Товар)
Таблица Клиенты (Клиент)
Таблица ЦеныНаГруппыТоваров (ГруппаТоваров, Цена)
Таблица ЦеныНаТоваров (Товар, Цена)
Таблица СпецценыДляКлиентовНаГруппыТоваров (Клиент, ГруппаТоваров, Спеццена)
Таблица СпецценыДляКлиентовНаТовары (Клиент, Товар, Спеццена)

Дальше - несколько лефт джоинов, если нет цены на товар, берем в качестве цены цену для группы. Простой изнулл.
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37859772
ochelot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду пробовать...
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37859817
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель,

Неясен смысл таблиц ЦеныНаГруппыТоваров и ЦеныНаТоваров.
У них же отношение 1:1 с мастер-таблицами.
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37859838
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинНеясен смысл таблиц ЦеныНаГруппыТоваров и ЦеныНаТоваров.
У них же отношение 1:1 с мастер-таблицами.
Да. В сферическом вакууме можно без них. В реальности цены всегда с интервалом действия цены.
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37862372
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЕсли у вас цена может быть и на всю группу товаров и на отдельные товары, то таблицы такие:

Справочник ГруппыТоваров (ГруппаТоваров)
Таблица Товары (ГруппаТоваров, Товар)
Таблица Клиенты (Клиент)
Таблица ЦеныНаГруппыТоваров (ГруппаТоваров, Цена)
Таблица ЦеныНаТоваров (Товар, Цена)
Таблица СпецценыДляКлиентовНаГруппыТоваров (Клиент, ГруппаТоваров, Спеццена)
Таблица СпецценыДляКлиентовНаТовары (Клиент, Товар, Спеццена)

Дальше - несколько лефт джоинов, если нет цены на товар, берем в качестве цены цену для группы. Простой изнулл.

Эка вас колбасит!
Расскажу как когда-то сам делал.
1. все товары, работы, услуги и т.д. физически располагаются в одной таблице в дереве, т.о. никаких ненужных справочников, типа "ГруппыТоваров", ГруппыГруппТоваров" и прочая шняга не требуется.
2. Аналогичный подход и к контрагентам.
3. Т.о. есть две таблицы "Контрагенты" и "Товары", чтобы решить задачу ТС приводим систему к 4 НФ (многие-ко-многим) , иными словами, создаём таблицу "контрагенты_товары" с полями "наценка", "цена" и пр.
где "наценка" - при желании указываем % наценку на входную цену на товар, "цена" - хранит фиксированную цену на товар (группу товаров) для контрагента (группы контрагентов).
Такая схема позволяет в один клик менять цены.
Да, некоторые продавцы достаточно жадные, поэтому математические правила округления цены их категорически не устраивают, поэтому лучше сразу озаботится этой проблемой. Как у меня было сделано, см. на рисунке. В БД была создана специальная UDF
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37863866
ochelot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Пишу запрос...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT 
  tovar_gr.code, 
  tovar_gr.name, 
  tovar.code, 
  tovar.name, 
  spec_tovar.sum, 
  spec_tovar.comment, 
  spec_tovar.size, 
  ed_izm.name
FROM 
  public.client, 
  public.tovar_gr, 
  public.ed_izm, 
  public.catalog_tovar, 
  public.spec_tovar, 
  public.tovar

where
  catalog_tovar.id_client = client.id AND
  catalog_tovar.id_spec_tovar = spec_tovar.id AND
  spec_tovar.id_tovar = tovar.id AND
  spec_tovar.id_ed_izm = ed_izm.id AND
  tovar.id_tovar_gr = tovar_gr.id AND 
client.id = 2;


И получаю вот такую табличку...
"code""name""code""name""sum""comment""size""name""125""ГЕРМЕТИК""125-049""Kleo НЕЙТРАЛЬНЫЙ Герметик белый 280 мл""10%""От закупочной"1"шт""125""ГЕРМЕТИК""125-048""Kleo САНИТАРНЫЙ Герметик прозрачный 280 мл""15%""От закупочной"1"шт"

А можно сделать чтобы "код" и "группа" выводились один раз, типа...
"code""name""code""name""sum""comment""size""name""125""ГЕРМЕТИК""125-049""Kleo НЕЙТРАЛЬНЫЙ Герметик белый 280 мл""10%""От закупочной"1"шт""""""125-048""Kleo САНИТАРНЫЙ Герметик прозрачный 280 мл""15%""От закупочной"1"шт"
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37864182
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ochelot,

нет, нельзя. Чтобы было "красиво" как ты хочешь, кто-то где-то должен хранить предыдущие значения этого поля. Типа: "если предыдущее значение поля совпадает с текущим, то делаем "красиво"".
Если всё-таки очень хочется сделать "красиво", то тут два пути:
1. Если сервер позволяет создавать процедуры, то оберни свой запрос в процедуру, а там уже, в процедуре и анализируй каждую строчку.
2. Результат твоего запроса не в воздух-же выстреливается, вот и анализируй ситуацию в клиентском приложении, (построитель отчёта и т.п.)
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37864389
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ochelot,
Принципиально возможно, но реализация будет тяжелой и, скорее всего, зависеть от диалекта SQL.
Как Вам верно советуют, такие вопросы лучше решать на клиенте.
...
Рейтинг: 0 / 0
Как это можно спроектировать... ?
    #37864450
ochelot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, спасибо
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как это можно спроектировать... ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]