Проблема со стркутурой БД: городами, районами, поселками

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

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

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.485
    Симпатии:
    114
    Есть три таблицы: страна, регионы (область, край), города.
    Есть адреса, где указан еще один параметр, например:
    - Россия, Крым, г. Судак, пгт Новый Свет
    т.е. есть город, у него поселок. Либо есть адреса, где указан район Крыма, поселок.
    Как это учесть, не могу придумать?
     
  2. FidaSa

    FidaSa

    Регистр.:
    1 мар 2013
    Сообщения:
    510
    Симпатии:
    133
    Ну наверное все таки с точки зрения нормализации надо делать четвертую таблицу, связанную с таблицей городов по CITY_ID. Иначе просто логика вложенности сущностей нарушается, по моему мнению
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.485
    Симпатии:
    114
    и как ее заполнять, если нет района, как будет связываться город с регионом?
     
  4. Den1xxx

    Den1xxx

    Moderator
    Регистр.:
    15 янв 2014
    Сообщения:
    275
    Симпатии:
    146
    Как и все остальные — города, страны, регионы связываются между собой.
    Допустим, в каждой таблице есть id, и это ключ/автоинкремент
    А между собой таблицы свяжутся, если сделать ключ родителя в каждой подчинённой, например parent_id
    Потом связать всё, применив третью нормальную форму.
    Но вот имхо «пгт» в Вашем случае не относится к Городу. Это поселок городского типа и должен относиться к области, округу, но не к городу.
    Я бы не запаривался и сделал бы поле «Дополнительно» или как там требует интерфейс для подобных случаев.
    Или сделать вместо «город» — «населенный пункт». Так даже правильнее.
    Можно пользователям предлагать выбор, или заполнять форму самим, тогда в поле «населенный пункт» будет «городской округ Судак, пгт Новый свет»
     
    Последнее редактирование: 29 июн 2016
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.485
    Симпатии:
    114
    Есть адреса, когда пгт не упоминается, а просто город и улица. А есть, где без указания поселка яндекс находит совсем не то, что нужно в пределах того же крыма.
    Т.е. в городе могут быть поселки.
    А как у яндекса это дело устроено, кто-нибудь знает?
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.589
    Симпатии:
    1.497
    Адресация это та еще жесть, там где я сейчас живу может быть до 9 различных объектов в полном адресе и похоже это не предел...
    Как вариант это можно попробовать хранить в таблице типа категорий:
    - id
    - уровень вложенности
    - тип (... город, район, пгт, улица, дом ...)
    - поле горизонтальной связи по id с таким же уровнем вложенности, но другим типом - старое или альтернативное название

    Хотя с учетом того что Крым, г. Судак, пгт Новый Свет это сейчас одновременно и Россия и Украина имеет смысл две таблицы делать:
    1) id - name
    2) вертикальные и горизонтальные связи между id, тип
     
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.485
    Симпатии:
    114
    Со всем уважением, latteo, но нефига не понял :)
     
  8. Den1xxx

    Den1xxx

    Moderator
    Регистр.:
    15 янв 2014
    Сообщения:
    275
    Симпатии:
    146
    Да возьмите и посмотрите, как предлагают заполнить адрес компании с миллионами посетителей, и сделайте по аналогии.
    У них же всё доставляется почтой без проблем, и у Вас будет;)
    [​IMG]
     
  9. TopReseller

    TopReseller

    Регистр.:
    30 июл 2011
    Сообщения:
    329
    Симпатии:
    117
    Зачем что то выдумывать, когда есть официально структурированная база
    http://fias.nalog.ru/Updates.aspx
    Вот и делай на ее основе
     
  10. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.485
    Симпатии:
    114
    Проблема по большому счету в реализации структуры. И нужно учесть, что объекты могут быть и не из России. А там может быть другая структура.