Помощь по нормализации NoSQL - PullRequest
       3

Помощь по нормализации NoSQL

4 голосов
/ 31 августа 2011

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

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

Скажите, что я хочу следующееотношения:

Владелец 1 - M PC

PC 1 - M Parts

В этой традиционной реляционной схеме у нас есть Владелец ПК, а затемкаждый компьютер может состоять из множества частей.Это означает, что у нас обычно будут следующие таблицы:

Детали

ПК

PCParts

Владелец

У меня есть пара вопросов по этому поводу.

  1. Как опытный разработчик NoSQL создаст модель данных для этого?
  2. Будет ли ПК содержать массив ключей Part?Или я упустил момент?

Любая информация по этому вопросу будет приветствоваться.

1 Ответ

7 голосов
/ 31 августа 2011

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

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

Но это не нормализация - это денормализация .Это похоже на хранение списка идентификаторов, разделенных запятыми, в РСУБД, который будет повторяющейся группой , которая разбивает первую нормальную форму .

Вы могли бы задаться вопросом, как узнать, какие ПК содержатзаданная часть, если ссылки хранятся в документах ПК.Для этого вам придется хранить избыточный список ссылок на ПК в документе Part, а затем беспокоиться о том, как вы собираетесь синхронизировать двунаправленные ссылки, рискуя аномалиями, когда ПК думает, что использует Part, ноэта соответствующая часть не имеет ссылки на ПК (или наоборот).

Вы можете создать документ MongoDB, имитирующий таблицу пересечения многие-ко-многим в SQL, где один документ содержит ровно одну объективную ссылку на ПК иодна ссылка на часть.Затем создайте много таких документов, как если бы вы создали много строк в таблице пересечений в SQL.Но поскольку это документы, а не строки, нет схемы, обеспечивающей, чтобы во всех документах хранилась только одна ссылка для каждой сущности.И нет такого понятия, как JOIN для эффективного поиска.

Это последствия денормализации и баз данных, ориентированных на документы, и почему реляционные базы данных все еще имеют некоторые преимущества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...