2013-07-10 1 views
0

У меня есть иерархия данных, как это:Лучший способ для извлечения данных из базы данных MySQL для большой иерархии через PHP

Country 
-President // A Person 
--Central 
---Prime Minister // A Person 
----State 
-----Chief Minister // A Person 
------District 
-------District Minister // A Person 
--------Area 
---------Area Minister (AM) // A Person 

Поэтому в основном то, что я пытаюсь сделать здесь, я хочу, чтобы Focus на Area Minister. Поскольку он будет душой моего заявления. Другие - это только часть иерархии. Так что давайте говорить, если я добавляю в Area Minister, то он/она будет находиться под Area и Area находится под District Minister и District Minister под District и District находится под Chief Minister и SO ON......

Что я делаю здесь, добавив их детали для Area Minister в мой MySQL Database Так что я сделал в базе данных, я создал следующие таблицы:

  1. Страны // Для добавления записи
  2. президента // Для добавления президент в стране (Так country_id есть внешний ключ здесь)
  3. Central // Для добавления центрального при президенте (Так president_id является внешним ключом здесь)
  4. ...
  5. ...
  6. ...
  7. ...
  8. ...
  9. Область // Для добавления области под руководством менеджера районного (Так district_manager_id является внешним ключом здесь)
  10. Area_Minister // Для добавления министр площади (AM) в зоне (So area_id является forei gn key)

Вопрос для получения информации от AM по **PHP**. Я получаю данные от **MySQL**, а AM - это основные данные, которые я ищу, но соответствующие данные также требуются в некоторых случаях. Но ядро ​​AM - Data. Однако, если я пройду этот путь, я пытаюсь получить данные от 10 - TEN TABLES. Который я чувствую боль.

Потому, чтобы получить необходимые данные, я соответствовать Area ID в AM, то District Minister ID в Area и так далее до уровня начала иерархии.

Есть ли способ, который я могу сделать, чтобы свести к минимуму этот процесс. Поскольку основные данные, которые я хочу, это всего лишь AM i.e Area Manager's Data.

Любой способ, которым я могу его хорошо структурировать. Или, может быть, если кто-либо ищет помощи, кто-то может дать мне понять, что если это можно сделать с помощью хранимых процедур.

Я просто ищу способ уменьшить сложность кода в PHP и так много таблиц в MySQL, когда основные данные только там с AM.

Просьба совета.

+0

FWIW, я не думаю, что десять таблиц - это много. –

+0

@lc. На самом деле есть много других таблиц. Но эти таблицы я сделал для получения информации для «Менеджера пространства», поэтому 9 таблиц только для ссылки на «Диспетчер областей» выглядят довольно дорого для меня. Именно так, поэтому я ищу вас, люди, советы экспертов и понимание этого. –

+0

@lc. Основная проблема заключается в том, что всякий раз, когда я получаю детали для «Диспетчера областей», мне требуется получить данные из '10 таблиц'. –

ответ

1

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

  1. Использование декораторов. Вы можете создать объект диспетчера областей, который загружает только минимальные минимальные данные, необходимые при получении диспетчера областей. Добавьте методы к этому объекту, которые извлекают данные из других таблиц и запускают их запросы только тогда, когда эти данные необходимы. Например:

    class AreaManager { 
    
        public function __construct() { 
         //do code which loads the basic table data for an area manager 
        } 
    
        public function getPresident() { 
         // do the SQL needed to load the president from the relational tables 
        } 
    
    } 
    
  2. Денормализовать ваши данные. Вы можете запустить скрипт периодически, который принимает данные и помещает его в одну таблицу - так у вас есть структура, как это:

    area_manager_id | country_name | president | prime_minister | etc. 
    

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

Все, что было сказано, вы создали реляционные таблицы так, как они должны быть использованы и запрос 10 таблицы обычно не конец света.

1

Ваши данные не будут такими плохими, если вы указали свой внешний ключ, а затем с помощью соединений на то, что вы получаете, будет хорошо.

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

Смежные вопросы