Приветствую.
Подскажите как организовать БД?
Например:
одна организация, у которой несколько филиалов, у которых, в свою очередь, несколько отделов, и у отделов есть произвольное количество параметров.
Надо чтоб была возможность изменять/удалять любой уровень.
Есть таблицы каждого уровня, а вот как их связать и вывести чёт не соображу никак, в отпуск надо, наверное...
добавлять тоже надо в любой уровень, кроме верхнего.
можно создать таблицу и уникальный индекс по всем айдишникам запилить, но тогда как узнать в какую именно строку вносить изменения?
Вряд ли кто ответит на такой абстрактный вопрос. Почитай про нормализацию БД. многое для себя узнаешь.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Надоело одно и тоже отвечать.
Вперед гуглить про:
Nested Sets, Metrialized Path, Adjacency List, читаем про каждый из алгоритмов, выбираем подходящий и пользуемся.
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. ©
AllesKlar
Цитата |
Надоело одно и тоже отвечать |
да, вопрос не новый и достаточно заезженный =)
вывести дерево не проблема, проблема изменить произвольный уровень... аяксом, например
Цитата (rooor @ 11.06.2014 - 14:39) |
Цитата | Надоело одно и тоже отвечать |
да, вопрос не новый и достаточно заезженный =) вывести дерево не проблема, проблема изменить произвольный уровень... аяксом, например
|
Еще раз. Читаем про алгоритмы, и смотрим примеры как меняются данные в каждом из них.
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. ©
AllesKlar
одна таблица для ДРЕВА
она будет управлять свей
базой таблицЭто в смысле добавления и удаления веток
все остальные таблицы списком, запросы к ним уже отдельная тема,
можно и напрямую , сложный запрос! тогда связь с древом
вот таким путем
к-к-кааа-Ак -то так
оф---то-....рисуй в екселе связи
_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___О) как-же он прав=>__________________ © Оноре де Бальзак. отличный хост(рекомендую !! )My MVC-CMV
блин, как же объяснить-то...
Структура:
-Компания_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;
}
ЗЫ: ушёл читать про деревья =)
ИМХО )) А префиксы зачем?
это был вопрос,
вот по префиксам и будешь различать, что и кому принадлежит в древе
вот и выходит
что не так
id_comа так
com_idи разу видно кто, и где, и от кого, и даже в префиксах можно уровень выводить.
то-есть есть ID настоящий и есть ID d древе
_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___О) как-же он прав=>__________________ © Оноре де Бальзак. отличный хост(рекомендую !! )My MVC-CMV
YVSIK
а теперь перечитай всё с самого начала)
sergeiss
11.06.2014 - 20:34
Цитата (rooor @ 11.06.2014 - 19:35) |
т.к. если добавить Филиал_2 и к нему привязать Отдел_1, вместе с отделом привяжутся и параметры. |
Не понял... Если у тебя появляется 2-й филиал, то у него будет (может/должен быть) свой Отдел_1, не имеющий отношения к 1-му филиалу и к его отделу с таким же названием. И пусть даже названия будут одинаковые. Но в БД у них будут разные айдишники. И связи надо делать по айдишникам. И параметры у отделов будут тоже свои, уникальные, привязанные по айдишнику отдела.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sergeiss
тогда так получается...
1 таблица - Компании: id_company и name
2 таблица - Филиалы: id_filial, id_company, name
3 таблица - Отделы: id_dept, id_filial, name
правильно понял?
Цитата (rooor @ 11.06.2014 - 20:33) |
а теперь перечитай всё с самого начала) |
наверное так
Цитата (rooor @ 11.06.2014 - 16:14) |
в какую именно строку вносить изменения? |
добавить префиксыи в них-же уровни.а теперь
будет ОДНА ТАБЛИЦА КОТОРАЯ ВСЕ ЭТО связывает. и тольо она будет это знать г-что лежит и управлять придется только ей гланым ДРЕВОМ
запросы же , строить от задачь, на выборку напрямую,, при добавлении
обращаемся к ДРЕВУ, есть или нет в нем, меняем и оно дает ответ где ТЕПЕРЬ это лежит
Получается: один запрос где и что лежит, второй для работы селект-инсерт-упдате ВСЁ
вообщем если что то напутал уйду из темы
Цитата (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
11.06.2014 - 20:54
Цитата (rooor @ 11.06.2014 - 20:40) |
тогда так получается... 1 таблица - Компании: id_company и name 2 таблица - Филиалы: id_filial, id_company, name 3 таблица - Отделы: id_dept, id_filial, name |
Да, так получается. Если по-другому, то будет изврат и нелогичность
А при такой структуре работаешь с любым элементом любой ветви, не затрагивая другие.
Кстати говоря, то, что у тебя id_company везде так назван, во всех таблицах - это правильно (как и все "однотипные" айди имеют одинаковые имен). Иногда называют "как бог на душу положит", так потом каждый раз приходится соображать, какой айдишник с каким связан. Если же они одинаковые, то и названы одинаково - голову ломать не нужно. При джойне, кстати, тоже удобнее, когда айдишники одинаково названы - запрос "красивее" получается.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Была такая мысль, только подумал, что не правильно будет одинаковые отделы заводить по 10 раз
Спасибо)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.