Рассматриваю возможность переноса одного проекта в компании на нереляционную структуру данных. Есть следующий кусок структуры:
Услуга:
Код (PK)
Наименование
Цена
Работа:
Код (PK)
Код услуги (FK)
Цена (дублируется из услуги, иногда изменяется)
Материалы:
Код (PK)
Код работы (FK)
В нереляционной модели, отношение 1:M у работы-материалов будет просто включено как поддокумент, т.е.
Код (PK)
Код услуги (FK)
Материалы: {
...
}
Вносить все выполненные работы внутрь услуги не выйдет, работы группируются по еще одному общему предку (по 1:M), а в отчетах нужно обязательно иметь возможность показать все работы, проведенные по данной услуге.
Если я правильно понимаю, каждый корневой документ в MongoDB имеет уникальный ключ _id, по которому было бы логично руками прописывать связь, без устроения FK. Но тогда, при удалении услуги, работа «ссылается» на несуществующий документ, что отчасти хорошо, так как не теряются данные, но плохо в том, что отсутствует информация.
Как вариант я рассматривал полностью дублировать поля услуги в работе, но это значительно увеличит размер хранимой информации.
Как решать подобные вещи? Очень сложно после SQL воспринимать данные как документы. По документации, подобная структура не очень одобряется.