Мне интересно с точки зрения дизайна базы данных, каков наилучший подход к сохранению ссылочного идентификатора или внедренного документа, даже если это означает, что несколько документов могут появляться более одного раза.
Допустим, у меня есть такоймодели на данный момент:
Пользователь коллекции:
{
name: String,
types : List<Type>
sharedTypes: List<Type>
}
Если я использую встроенную модель и не использую другую коллекцию, это может привести к дублированию типа объекта. Например, пользователь A создает тип aa, а пользователь B создает тип bb. Когда они делятся друг с другом, они печатают, это приводит к:
{
name: UserA,
types : [{name: aa}]
sharedTypes: [{name:bb}]
},
{
name: UserB,
types : [{name: bb}]
sharedTypes: [{name:aa}]
}
Что приводит к дублированию, так что я думаю, что это довольно плохой дизайн. Должен ли я использовать другой подход, такой как создание коллекции Type и сохранение referenceId?
Тип коллекции:
{
id: String
name: String
}
Что все равно приведет к дублированию, но не к целому документу, я думаю, это будет лучше.
{
name: UserA,
types : ["randomString1"]
sharedTypes: ["randomString2"]
},
{
name: UserA,
types : ["randomString2"]
sharedTypes: ["randomString1"]
}
И последний подход ивозможно, лучше всего хранить из таких типов коллекций вот так.
Пользователь коллекции:
{
id: String
name: String
}
Тип коллекции:
{
id: String
name: String,
createdBy: String (id of user),
sharedWith: List<String> (ids of user)
}
Каков наилучший подход между этим3. Я делаю запрос, как, у меня есть одна группа пользователей, поэтому для каждого пользователя я хочу, чтобы созданный тип и тип людей поделились со мной.