Я думаю о системе разрешений для моего проекта, и я не могу принять решение о том, как организовать мою систему разрешений. В короткой абстрактной форме я бы назвал свой вопрос следующим:
Должен ли я создавать общие объекты (строки) и применять разрешения или создавать отдельную копию экземпляра (строки) для каждого пользователя?Является ли эта конструкция базы данных или авторизация/разрешения ответственностью
Моя ситуация: У меня есть 2 объектов
Company
{
[PK]
Id,
Name,
Contacts,
OwnerUser
},
Contact
{
[PK]
Phone,
ContactPerson
}
, которые имеют много-ко-многим. Пользователям разрешается изменять фирму, созданную ими (собственностью).
Моя проблема: контактную сущность (строку) можно разделить между компаниями, принадлежащими другим пользователям, и предположим, что оба пользователя хотят изменить Contact.ContactPerson на другое значение (например, один пользователь утверждает, что номер телефона принадлежит Джону , и другое, что это номер Тома), эту ситуацию можно решить, если я создам отдельную копию Contact для каждой Компании (и, следовательно, пользователя), но мои бизнес-правила не позволяют дублировать Контакты с тем же номером телефона, а также другие свойства Contact которые должны быть разделены (согласно моим бизнес-правилам), кроме номера телефона.
Как разрешить эту ситуацию?
Телефон является уникальным и общим, потому что он содержит свойства, которые должны быть доступны для всех компаний, у которых есть этот номер телефона. В противном случае, когда какое-либо свойство телефона изменится (предположим некоторый флаг), нам нужно будет найти все экземпляры телефона в БД и обновить этот флаг \ property. –
Хорошо; в этом случае вы правы, когда говорите, что вам следует отделить ContactPerson и номер телефона - они являются отдельными объектами. Тем не менее, ваше требование о том, что контакты не могут иметь повторяющиеся номера телефонов, не имеет смысла в этом случае, так как это будет внешний ключ, связывающий несколько контактов с одним номером телефона. – kander