[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Деревья...
Страницы: 1, 2
rooor
Приветствую.
Подскажите как организовать БД?

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

Надо чтоб была возможность изменять/удалять любой уровень.

Есть таблицы каждого уровня, а вот как их связать и вывести чёт не соображу никак, в отпуск надо, наверное...
rooor
добавлять тоже надо в любой уровень, кроме верхнего.

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

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
vital
Надоело одно и тоже отвечать.
Вперед гуглить про:
Nested Sets, Metrialized Path, Adjacency List, читаем про каждый из алгоритмов, выбираем подходящий и пользуемся.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
rooor
Цитата
Надоело одно и тоже отвечать

да, вопрос не новый и достаточно заезженный =)
вывести дерево не проблема, проблема изменить произвольный уровень... аяксом, например
vital
Цитата (rooor @ 11.06.2014 - 14:39)
Цитата
Надоело одно и тоже отвечать

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

Еще раз. Читаем про алгоритмы, и смотрим примеры как меняются данные в каждом из них.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
YVSIK
одна таблица для ДРЕВА
она будет управлять свей базой таблиц
Это в смысле добавления и удаления веток
все остальные таблицы списком, запросы к ним уже отдельная тема,
можно и напрямую , сложный запрос! тогда связь с древом

вот таким путем wink.gif к-к-кааа-Ак -то так

оф---то-....рисуй в екселе связи

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
rooor
блин, как же объяснить-то...

Структура:
-Компания_1
--Филиал_1
---Отдел_1
----Параметр_1
---Отдел_2
----Параметр_1
----Параметр_2

Вариант 1.
Для каждой связи своя таблица, т.е. компания-филиал, филиал-отдел, отдел-параметр и т.д.
Не подходит, т.к. если добавить Филиал_2 и к нему привязать Отдел_1, вместе с отделом привяжутся и параметры.

Вариант 2.
Одна таблица для всей связки с ID компании, филиала, отдела и параметра.
Не подходит, т.к. при построении дерева некуда впихнуть ID строки.
Пример:
table_tree:
id | id_company | id_filial | id_department | param
1 | 1 | 1 | 1 | 1
2 | 1 | 1 | 1 | 2

В цикле собираем всё, чтобы потом в нужном месте вывести так же циклом, т.е:
{
$tree[id_com][id_filial][id_department] = param;
}


ЗЫ: ушёл читать про деревья =)
YVSIK
ИМХО )) А префиксы зачем?
это был вопрос, wink.gif
вот по префиксам и будешь различать, что и кому принадлежит в древе

вот и выходит
что не так id_com
а так com_id
и разу видно кто, и где, и от кого, и даже в префиксах можно уровень выводить.
то-есть есть ID настоящий и есть ID d древе

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
rooor
YVSIK
а теперь перечитай всё с самого начала)
sergeiss
Цитата (rooor @ 11.06.2014 - 19:35)
т.к. если добавить Филиал_2 и к нему привязать Отдел_1, вместе с отделом привяжутся и параметры.

Не понял... Если у тебя появляется 2-й филиал, то у него будет (может/должен быть) свой Отдел_1, не имеющий отношения к 1-му филиалу и к его отделу с таким же названием. И пусть даже названия будут одинаковые. Но в БД у них будут разные айдишники. И связи надо делать по айдишникам. И параметры у отделов будут тоже свои, уникальные, привязанные по айдишнику отдела.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
rooor
sergeiss
тогда так получается...
1 таблица - Компании: id_company и name
2 таблица - Филиалы: id_filial, id_company, name
3 таблица - Отделы: id_dept, id_filial, name

правильно понял?
YVSIK
Цитата (rooor @ 11.06.2014 - 20:33)
а теперь перечитай всё с самого начала)


наверное так
Цитата (rooor @ 11.06.2014 - 16:14)
в какую именно строку вносить изменения?

добавить префиксыи в них-же уровни.а теперь
будет ОДНА ТАБЛИЦА КОТОРАЯ ВСЕ ЭТО связывает. и тольо она будет это знать г-что лежит и управлять придется только ей гланым ДРЕВОМ
запросы же , строить от задачь, на выборку напрямую,, при добавлении
обращаемся к ДРЕВУ, есть или нет в нем, меняем и оно дает ответ где ТЕПЕРЬ это лежит

Получается: один запрос где и что лежит, второй для работы селект-инсерт-упдате ВСЁ huh.gif
вообщем если что то напутал уйду из темы

Цитата (rooor @ 11.06.2014 - 20:40)
1 таблица - Компании: id_company и name
2 таблица - Филиалы: id_filial, id_company, name
3 таблица - Отделы: id_dept, id_filial, name


вот поменяй на префиксы это

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
sergeiss
Цитата (rooor @ 11.06.2014 - 20:40)
тогда так получается...
1 таблица - Компании: id_company и name
2 таблица - Филиалы: id_filial, id_company, name
3 таблица - Отделы: id_dept, id_filial, name

Да, так получается. Если по-другому, то будет изврат и нелогичность smile.gif А при такой структуре работаешь с любым элементом любой ветви, не затрагивая другие.

Кстати говоря, то, что у тебя id_company везде так назван, во всех таблицах - это правильно (как и все "однотипные" айди имеют одинаковые имен). Иногда называют "как бог на душу положит", так потом каждый раз приходится соображать, какой айдишник с каким связан. Если же они одинаковые, то и названы одинаково - голову ломать не нужно. При джойне, кстати, тоже удобнее, когда айдишники одинаково названы - запрос "красивее" получается.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
rooor
Была такая мысль, только подумал, что не правильно будет одинаковые отделы заводить по 10 раз

Спасибо)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.