Таблица project_board_members
представляет то, что в мире моделирования Entity-Relationship называется «ассоциативной сущностью».Он существует для реализации отношения «многие ко многим» (в данном случае между проектом и пользовательскими объектами. Таким образом, это зависимый объект, то есть существование его экземпляраосновывается на существовании экземпляра каждого из объектов, на которые он ссылается (пользователя и проекта).
В результате столбцы содержат внешние ключи, относящиеся к этим объектам (member_id
и project_id
) должен быть частью или всем первичным ключом.
Обычно экземпляры ассоциативного объекта являются уникальными WRT объектами, к которым он относится. В вашем случае определения отношений будут такими:
- Каждый пользователь сидит на доске 0-ко-многим проектам;
- Плата каждого проекта состоит из 0-ко-многим пользователям
, то естьскажем, что конкретный пользователь может не входить в правление определенного проекта более одного раза. Единственная причина добавления других столбцов (например, столбца id
) к первичному ключу состоит в том, еслиОтношение пользователь: проект не является уникальным.
Для соблюдения этого правила - пользователь может один раз сесть на доску определенного проекта - схема таблицы должна выглядеть следующим образом:
create table project_board_member
(
member_id int not null foreign key references user ( user_id ) ,
project_Id int not null foreign key references project ( project_id ) ,
created_at ...
...
primary key ( member_id , project_id ) ,
)
}
Столбец id
является лишним.