Предположим, я хочу смоделировать систему с сотрудниками и проектами. Каждый сотрудник может быть частью от 0 до n проектов, и проект может иметь от 0 до n сотрудников, работающих на нем. Для моделирования этого я создал 3 таблицы, employee
, project
и work
со следующими отношениямиТернарные отношения в базе данных
| employee
| (0..n) < ----> (1..1) | work
| (1..1) < ----> (0..n) | project
|
Пока все хорошо, таблица work
имеет только два атрибута (идентификатор от записи сотрудника и идентификатор проекта), и это работает нормально.
В каждом проекте также должен быть общедоступный «чат» и частный. Публика позволяет всем в компании видеть и отправлять сообщения в чат этого проекта. С другой стороны, в частном, только сотрудники, входящие в этот конкретный проект, могут видеть и отправлять сообщения.
Общедоступный чат легко моделируется, поскольку каждому разрешено просматривать сообщения. Я сомневаюсь в частном. Я хочу, чтобы принудительное условие частных сообщений в базу данных, так как личное сообщение связано с сотрудником, который является частью этого конкретного проекта. Способ, которым я нашел это, - добавить id
в таблицу work
и использовать этот идентификатор в качестве внешнего ключа в таблице private_message
. Таким образом, соотношение между этими двумя таблицами будет:
| private_message
| (1..1) < ----> (0..n) | work
|
Это хороший способ смоделировать эту ситуацию? А если нет, то как я могу улучшить эту модель?
Спасибо.
Не могли бы вы определить 'work'? –