Я занимаюсь чтением в базах данных "один ко многим", но я стараюсь понять, как лучше всего реализовать решение в моем случае.
Я хочу, чтобы база данных MySQL записывала, какие сотрудники прочитали определенные тренировочные раздачи на работе.
Поэтому у меня есть таблица сотрудников. И у меня есть таблица раздаточных материалов.
Я хочу записать, если сотрудник щелкнул, чтобы сказать, что они прочитали раздачу.
Таблица My Employee имеет идентификатор, имя, адрес электронной почты.
В таблице "Моя раздача" есть идентификатор, заголовок
Лучше ли добавить поле в таблицу Employee, которое будет содержать список "Идентификаторов раздачи", чтобы показать, какие раздачи они прочитали?
Мне нужно иметь возможность легко искать, чтобы показать, какой процент сотрудников прочитал определенную раздачу, и я думаю, что мой метод сделает это очень трудным?
Я не могу иметь отдельные поля в таблице Employee, такие как Handout1, Handout2 и т.д., Поскольку новые раздачи будут добавляться регулярно.
Я уверен, что это, должно быть, общая проблема, поэтому задавался вопросом, может ли кто-нибудь направить меня на лучшее решение для этого?
Спасибо
Мне кажется, вам нужна таблица мостов, в которой записаны отношения между сотрудниками и реестрами. Что-то вроде этого:
Employee_Handout (ID, EmployeeID, HandoutID)
Каждый раз, когда выдается новый раздаточный материал, вы должны вставлять запись в таблицу раздаточных материалов. Затем, когда данный сотрудник читает этот раздаточный материал, вы должны вставить новую запись в таблицу Employee_Handout
. Вам, вероятно, не нужно сохранять нечитаемые данные, так как они легко могут быть обнаружены как отсутствующие в таблице мостов.
Первичный ключ для этого столбца, вероятно, будет (EmployeeID, HandoutID)
, предполагая, что вам нужна только одна запись, связанная с работником, читающим данный раздаточный материал. Это также означало бы, что данные отношения между сотрудниками и раздаточными материалами могут быть сохранены только один раз.
UNIQUE(EmployeeID, HandoudID)
чтобы не было дубликатов.
(EmployeeID, HandoutID)
первичным ключом.