SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.07.2012 09:43:28

Златов
Участник
Зарегистрирован: 13.07.2012
Сообщений: 1

Нормализация с дополнительными таблицами против простых запросов

Необходимо создать базу данных компаний по регионам и городам в РФ.

Регионы РФ представляют собой дерево: Федеральный округ — Область — Город. Дерево строится путем указания родителя элемента `parentid`.

У меня есть два пути, подскажите, по какому пойти.

Первый путь.

Хотелось бы, чтобы в таблице `компании` был только один столбец отвечающие за географическое положение Компании на территории РФ — таким образом, такая база данных была бы «Нормализованной». Но, тогда, чтобы отобразить все компании принадлежащие к корневому разделу (Федеральный округ), необходимо, сначала, вытащить всех «детей» этой ветки дерева:


...
WHERE `companies`.`region`
IN (
    SELECT `regions`.`id`
    FROM `regions`
    WHERE `regions`.`parentid`
    IN (
        SELECT `regions`.`id`
        FROM `regions`
        WHERE `regions`.`sid` = '$_GET[sid_section]'
    )
)
...
 
Причем, если мы находимся не в корне дерева, а в ветке, то необходимо искать детей с меньшим вложением:

...
WHERE `companies`.`region`
IN (
    SELECT `regions`.`id`
    FROM `regions`
    WHERE `regions`.`sid` = '$_GET[sid_section]'
)
...
 
Для того, чтобы выяснить каким запросом пользоваться - необходимо определять на каком уровне дерева мы находимся, что в целом удручает меня сложностью и количеством запросов к БД.

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

Второй путь.

Забить на то, что количество ступеней дерева может разниться (добавить районы в какую-нибудь область), жестко задать трехступенчатую структуру, а в таблице `Компании` указывать три столбца (Округ,Область, Город) к каждой записи!.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson