Таблица структуры городов

Тема в разделе "Базы данных", создана пользователем danneo, 1 июл 2017.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    У объектов есть страна, регион, город. Все в трех таблицах. Это для РФ.
    А если взять, например, Турцию. Там только два уровня. Турия - Анталья. А далее улица уже и дом.
    При выводе списка объектов делается три запроса из каждой таблицы. Если объект в турции, то при поиске в таблице городов, находится null. И далее все рушится, ничего нет.Кроме Турции, мне кажется, будет немало стран, где подобный уровень деления.
    Как можно решить такую проблему?
    Была мысль сделать разную вложенность в одной таблице, как категории. Но тогда непонятно как выводить такой адрес у объекта. Если только рекурсией в БД сразу, но не выход.
     
  2. starwanderer

    starwanderer

    Регистр.:
    20 ноя 2016
    Сообщения:
    292
    Симпатии:
    262
    Если делаете всё одним запросом и у вас результате 0 строк, то использовать внешнее объединение в запросе.

    Если вопрос именно в получаемом значении null в поле город, то вариантов несколько.
    Можно сделать запись в таблице городов к примеру со значением "отсутствует".
    Можно подставить функцию, которая при получении null из поля возвращала какое-нибудь текстовое или числовое значение.
    Можно сделать поле - признак в таблице со странами - выполнять запрос из третей таблицы или выдать пустую строку, а не null.
    Думаю, что ещё варианты есть. Всё от логики вашего приложения зависит.
     
    danneo нравится это.
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    например, вывожу все объекты... в этом же запросе делаю запрос и связку городов (join города с регионом и страной). Поэтому никак нельзя определить, откуда делать запрос, из города или региона (если города нет). Как вариант, делать как-то через MySQL if-else, но это я не умею.
     
    Последнее редактирование: 1 июл 2017
  4. starwanderer

    starwanderer

    Регистр.:
    20 ноя 2016
    Сообщения:
    292
    Симпатии:
    262
    У вас картинка в голове и она для вас очевидна, а мне её не понять. Опишите логику полностью. Что есть и что хотите получить.
    Что-то для туристического бизнеса пишете ?
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    Все банально: отели, у них адреса. Отели мира. Нужна таблица с городами. Сейчас они в три таблицы разнесены (3 вложенности). Столкнулся вот с такой проблемой, что в Турции 2 уровня вложенности. А есть где и 4 вложенности бывает, например в РФ.
    Вот и думаю теперь, как решить проблему.
     
  6. starwanderer

    starwanderer

    Регистр.:
    20 ноя 2016
    Сообщения:
    292
    Симпатии:
    262
    Вот такие мысли посетили:
    Что касается Антальи, то она относится к провинции с одноименным названием. Так-что регионы можно и там ввести.
    Либо наоборот связать напрямую города со страной, а регионы сделать справочной таблицей, привязав уже к городам.
     
    danneo нравится это.
  7. Роман Дмитриев

    Роман Дмитриев Создатель

    Регистр.:
    16 авг 2015
    Сообщения:
    14
    Симпатии:
    0
    Как вариант добавить в таблицу стран столбец регион. Тогда для Турции в столбце регион просто будет пусто. Подчинённые адреса вязать с этой таблицей. При этом плюнуть на то, что часть данных будет задублирована (одно и то же значение страны для разных регионов). За счёт этого незначительно увеличится БД, зато будут быстрее выполняться запросы на объединение полного адреса.
     
  8. krivov

    krivov Постоялец

    Регистр.:
    24 дек 2007
    Сообщения:
    143
    Симпатии:
    19
    А сейчас какие таблицы?
    City - name, id_city, id_region, id_country
    Region - name, id_region, id_country
    Country - name, id_country
    Hotel - name, id_city
    Как-то так?

    Если так - тогда при запросе данных отеля просто join на город, регион и страну (для турции регион будет null).
    При изменении отеля - сперва достаем все страны, выбираем страну, потом регионы этой страны, если регионы пустой массив то сразу города