Страницы: 1
RSS
PP. Как создать модель данных при наличии 3-х уровней вложенности., Есть Категория, подкатегория и тип (3-й уровений)
 
Здравствуйте!
Прошу подсказать как правильно организовать справочники в случае, если есть 3 уровня вложенности:

 1. Кафе
     2. Блюдо
         3. Тип блюда

Прикладываю пример с подготовленной моделью.
Спасибо!

     
 
это называется классическая схема "снежинка" в реалиционных базах данных. Именно по таким схемам Вам и надо строить модели данных и тогда Вы сможете спокойно делать любые вычисления, а то в ваших примерах иногда, простите, такой "изврат" встречается...черт ногу сломит. И да, справочники лучше всего соединять не по текстовым названиям, а по числовым кодам (ID) номенклатуры, потому что текстовая номенклатура у разных групп может повторяться, а вот коды должны быть уникальными (ну если вы грузите данные из других источников баз данных). а таблица фактов должна состоять из номенклатуры (или код ID) и непосредственно значений - все остальная шелуха хранится в справочниках.
 
Vladimir Chebykin, благодарю за помощь, я немного удивлён следующим: "а то в ваших примерах иногда, простите, такой "изврат" встречается...черт ногу сломит", не думал, что у меня с примерами что-то не так, стараюсь делать примеры аккуратными и подробными.

Vladimir Chebykin, я изначально приложил упрощённый пример к задаче. На деле у меня ситуация, где значения из 3-го столбца повторяются для значений 2-го столбца, если их оставить в одной таблице вместе (если вывести в отдельный справочник, то разумеется все записи будут уникальны). Из-за этого, если создавать справочник, где все 3 категории в одной таблице, то при подключении к таблице событий, получается связь "многие ко многим".
Прикладываю пример. Подскажите, это нормально? В этой ситуации всё равно делать один справочник?

Увы, я беру информацию не из базы данных. Справочники необходимо создавать самому и у записей нет ID.

[FILE ID=388558]

P.S.: на скриншоте правая таблица, это таблица в которой значения третьего уровня не повторялись и получался справочник, который подключался к таблице событий по связи 1:*. Слева, таблица которая подключается по связи * : *
Изменено: ivanka - 06.04.2020 10:10:03
 
А как вы из факта поймете к какой подкатегории относится строка 20 кг к гантелям или к штангам?
В любом случае в справочнике должно иметься ключевое поле содержащее только уникальные значения для данного столбца. Можете сделать такое поле путем сцепки полей Тип и Подкатегория, но откуда вы возьмете тип в факте я без понятия.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
А как вы из факта поймете к какой подкатегории относится строка 20 кг к гантелям или к штангам?

В таблице фактов (событий) всё по строкам прописано. Т.е. я на входе получаю таблицу фактов, из неё уже делаю справочники. Любую связь между уровнями я могу сохранить (изображение ниже).

В PQ я разделял 3 уровня на три таблицы и создавал между ними ключи. В таблице 1 были ключи lv. 1 key, в таблице 2 были ключи  lv. 1 key и  lv. 2 key, в таблице 3 были ключи lv. 2 key. Но данная модель не работала как надо, т.к. направление связи в таблицах менялось в противоположную сторону от таблицы фактов.

 
Изменено: ivanka - 06.04.2020 10:17:56
 
Цитата
ivanka написал:
т.к. направление связи в таблицах менялось в противоположную сторону от таблицы фактов
Что значит менялось? 8-0 Оно само не меняется, оно может только при создании связи путем перетаскивания мышью устанавливаться в конкретную сторону, и только в том случае, когда в обеих таблицах записи по ключу уникальные. Если же хоть в одно таблице будет дубль по ключу, то связь будет от одного ко многим всегда. И в любом случае никто не мешает зайти в мастер связей и поставить нужное вам направление вручную, только для этого нужно чтобы в модели было минимум 3 таблицы, тогда получится без проблем РР с его автообнаружениями перехитрить.
Вот горшок пустой, он предмет простой...
 
PooHkrd, прикладываю пример. Подскажите, как изменить направление связи от справочника "dim тип" в сторону таблицы событий "data"?

 
Изменено: ivanka - 06.04.2020 11:02:03
 
ivanka, мать моя женщина! Что это?! Теперь я понял про
Цитата
Vladimir Chebykin написал:
а то в ваших примерах иногда, простите, такой "изврат" встречается...черт ногу сломит.
Надо так, чтобы сначала с фактом соединялся справочник с типом, потом к типу соединять подкатегорию, и уже к подкатегории подключать категорию. Вы же вообще все связи сделали ровно наоборот от того как надо. Вам РР как раз намекает про то в какую сторону нужно связи делать направлением стрелочки.  ;)
И второе, зачем вы каждую категорию выносите в отдельный справочник? Этим вы только раздуваете модель и увеличиваете количество оперативки, которое потребуется для расчетов модели.
Имейте в виду, что каждая связь по сути представляет из себя Кроссджойн ВСЕХ таблиц участвующих в ней, если вот так плодить справочники и табличка фактов распухнет до серьезных размеров, то скоро вы столкнетесь с проблемами в скорости даже элементарных расчетов, не говоря про всякие сложные меры и про то что вы так в контексте фильтров потом сами же и запутаетесь.
В вашем случае ИМХО вполне достаточен один справочник из трех полей. Не плодите сущности.
Вот горшок пустой, он предмет простой...
 
PooHkrd, Vladimir Chebykin,  вы меня так подстёбываете, словно на этом форуме все без исключения задают вопросы корректно. Я думал, сюда как раз пишут люди, которые запутались или допустили ошибку и не видят её.

Цитата
Vladimir Chebykin написал:
а то в ваших примерах иногда, простите, такой "изврат" встречается...черт ногу сломит.
Да нет там "изврата", просто вы смотрите на любую задачу зная логику, и вы к этой логике настолько привыкли (как к речи на русском), что любое другое видение вам кажется "сломанной речью". Но странно нарекать это "изврат", если вы периодически заглядываете в "логопедический центр" (форум).  
 
Цитата
PooHkrd написал:
И второе, зачем вы каждую категорию выносите в отдельный справочник? Этим вы только раздуваете модель и увеличиваете количество оперативки, которое потребуется для расчетов модели.
Благодарю за совет! Ошибку понял. Мне казалось странным подключать все справочники к событиям через "нижний уровень".  
 
Цитата
PooHkrd написал:
В вашем случае ИМХО вполне достаточен один справочник из трех полей. Не плодите сущности.
Тогда подключение будет многие ко многим. Верно? Т.к. в справочнике не будет уникальных записей. В каждом столбце записи будут повторяться.  
 
Цитата
ivanka написал:
не думал, что у меня с примерами что-то не так, стараюсь делать примеры аккуратными и подробными.
- не так поняли, примеры сами по себе нормальные, но вот модели данных, которые Вы делаете - они, мягко говоря, не правильные. Вы поймите, что правильно построенная модель данных - это как минимум 50% успеха выполнения поставленной задачи. Я не зря упомянул про реляционные базы данных. Мой Вам совет: прочитайте про классические реляционные базы данных в интернете, про нормальные формы 1-ого и второго типа, атомарность значений... Потратьте на это 1 день и все у Вас встанет по полочкам, поверьте, сэкономите кучу времени в будущем.
 
По поводу справочников и иерархии: Справочник соединяется с таблицей фактов по самому нижнему уровню иерархии и он должен содержать только уникальные значения (иначе это уже на справочник), а остальные столбцы со значениями в справочниками могут дублироваться сколько угодно. В моем примере справочник состоит из 3-ех уровней (кол-во столбцов), но только самый нижний уровень имеет уникальные значения (столбец "тип"). Именно он соединяется с таблицей фактов. Если все же на нижнем уровне справочника (столбец "тип") есть одинаковые слова, но относящиеся к разным категориям, то
Цитата
PooHkrd написал:
сделать такое поле путем сцепки полей Тип и Подкатегория,
только такая же сцепка в таком случае должна присутствовать и в таблице фактов.
 
Цитата
Vladimir Chebykin написал:
только такая же сцепка в таком случае должна присутствовать и в таблице фактов.
Я понял! Отлично! Благодарю!

Цитата
Vladimir Chebykin написал:
Мой Вам совет: прочитайте про классические реляционные базы
Благодарю за совет! Обязательно ознакомлюсь.  
 
Цитата
ivanka написал:
вы меня так подстёбываете
Я не подстебывал, я сильно удивился.
Просто вроде бы первой ссылкой при гуглеже словосчетания Power Pivot показывается вот эта. А там уже целая куча ссылок с ответами на все вопросы, которые вы тут задаете. Это как в мультике где страуса учили летать "Лучше день потерять, потом за 5 минут долететь!"
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Power Pivot показывается  вот эта
Благодарю за ссылку. Обязательно ознакомлюсь!
 
ivanka, там обратите особое внимание на эту ссылку, она прямо по поводу вашей текущей темы.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх