Реляционное моделирование или нереляционное моделирование данных - что такое разница

Я новичок в базах данных и никогда не работал с какой-либо СУБД. Однако я понимаю основную идею реляционных баз данных. По крайней мере, я так думаю;

  • id
  • name
  • zip
  • city

В реляционной базе данных я бы, например, смоделировал его в таблице с именем user

  • user
    • id
    • name
    • location_id

и иметь вторую таблицу с именем location

  • location
    • id
    • zip
    • city

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

Итак, давайте перейдем к нереляционной базе данных , где я начал экспериментировать с Google App Engine. Вот я бы действительно смоделировал так, как будто это было записано первым в спецификации. У меня есть добрый пользователь :

class User(db.Model):
    name = db.StringProperty()
    zip = db.StringProperty()
    city = db.StringProperty()

Преимущество в том, что мне не нужно объединять две «таблицы», но недостаток в том, что при изменении почтового индекса я должен запустить сценарий, который идет через все записи пользователей и обновляет почтовый индекс, правильно?

Итак, теперь в Google App Engine есть еще одна опция, который должен использовать ReferenceProperties . У меня могло быть два типа: пользователь и местоположение

class Location(db.Model):
    zip = db.StringProperty()
    city = db.StringProperty()

class User(db.Model):
    name = db.StringProperty()
    location = db.ReferenceProperty(Location)

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

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

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

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

20
задан raam86 13 May 2013 в 20:04
поделиться