Я хочу создать небольшое приложение-задачу с MYSQL и PHP. Я хочу назначать задачи отдельным пользователям и нескольким группам пользователей. Я думал иметь user_table:
userid name
1 Peter
2 Hans
usergroup_table
usergroup_id name
1 Usergroup 1
2 Usergroup 2
usergroupmap_table (2 общих первичных ключа)
usergroup_id userid
1 1
1 2
tasks_table
taskid taskname due_date
1 Finish my exams 10-06-2016
2 Another task 2 do 15-06-2016
От этого легко. Теперь я могу придумать 3 способа, как назначить пользователя и группы пользователей задачам. Но я не могу выбрать, какой из них лучше (Нормализация??)
Решение 1
две отдельные таблицы, одна таблица с отдельными пользователями, а другая с назначенными группами: usertask_table (2 общих первичных ключа) && usergroup_table
taskid userid
1 1
1 1
taskid groupid
1 1
2 1
Решение 2
Комбинированная таблица с идентификатором пользователя 0 или идентификатором группы 0:
taskid groupid userid
1 1 0
2 1 0
2 0 1
2 0 2
Решение 3
Комбинированная таблица со всеми назначенными задачами, но с varchar для определения выбранной группы
taskid type id
1 group 1
1 group 2
2 user 1
2 user 2
Я понятия не имею, какое решение дает мне наиболее оптимальный дизайн. Я хочу расширить это приложение также некоторыми другими таблицами, где таким же образом должны быть назначены права пользователя и группы. Теперь я думаю о 3-м решении...