Является ли ответственность за дизайн базы данных или авторизацию / разрешения

Я думаю о системе разрешений для моего проекта и не могу принять решение о том, как организовать свою систему разрешений. В краткой абстрактной форме я бы описал свой вопрос так:
Должен ли я создавать общие объекты (строки) и применять разрешения или создавать отдельную копию объекта (строки) для каждого пользователя?

Моя ситуация: у меня есть 2 лица

Company
{
   [PK]
   Id,
   Name, 
   Contacts, 
   OwnerUser
}, 
Contact
{
   [PK]
   Phone,
   ContactPerson
}

которые имеют отношения многие ко многим. Пользователям разрешено изменять сущность Компании, которую они создали (свою).

Моя проблема: сущность контакта (строка) может быть разделена между компаниями, которые принадлежат разным пользователям, и предположим, что оба пользователя хотят изменить значение Contact.ContactPerson на другое значение (например, один пользователь утверждает, что телефон принадлежит Джону, а другой - что это номер Тома), эту ситуацию можно решить, если я создам отдельную копию Контакта для каждой Компании (и, следовательно, пользователя), но мои бизнес-правила не допускают дублирования Контактов с одним и тем же номером телефона, и есть другие свойства Контакта, которые должны быть общими. (согласно моим деловым правилам) помимо номера телефона.

Как решить эту ситуацию?

2 ответа

Решение

В конце концов, вы должны создать политику. Вы можете применить политику к слиянию, если возник конфликт (например, в управлении версиями), или строгую политику, которую может редактировать только создатель контакта, или любой может редактировать контакт, пока контакт находится в ее компании, или сложную политику, которая использует рейтинг (точка), чтобы получить доступ к редактированию, как stackru:P.

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

Похоже, ваша бизнес-логика находится в конфликте там. С одной стороны, вы говорите, что два пользователя могут не согласиться с тем, чей номер телефона является номером (что совершенно справедливо, если два человека используют один рабочий стол / телефон). С другой стороны, вы говорите, что ваша бизнес-логика не допускает дублирования телефонных номеров.

Почему ваша логика настаивает на уникальных телефонных номерах? Мне кажется, что вы создали ПК, который не гарантированно уникален и поэтому не подходит.

Другие вопросы по тегам