Как спроектировать эту базу данных для многих?

0

Я занимаюсь чтением в базах данных "один ко многим", но я стараюсь понять, как лучше всего реализовать решение в моем случае.

Я хочу, чтобы база данных MySQL записывала, какие сотрудники прочитали определенные тренировочные раздачи на работе.

Поэтому у меня есть таблица сотрудников. И у меня есть таблица раздаточных материалов.

Я хочу записать, если сотрудник щелкнул, чтобы сказать, что они прочитали раздачу.

Таблица My Employee имеет идентификатор, имя, адрес электронной почты.

В таблице "Моя раздача" есть идентификатор, заголовок

Лучше ли добавить поле в таблицу Employee, которое будет содержать список "Идентификаторов раздачи", чтобы показать, какие раздачи они прочитали?

Мне нужно иметь возможность легко искать, чтобы показать, какой процент сотрудников прочитал определенную раздачу, и я думаю, что мой метод сделает это очень трудным?

Я не могу иметь отдельные поля в таблице Employee, такие как Handout1, Handout2 и т.д., Поскольку новые раздачи будут добавляться регулярно.

Я уверен, что это, должно быть, общая проблема, поэтому задавался вопросом, может ли кто-нибудь направить меня на лучшее решение для этого?

Спасибо

  • 2
    Поиск ассоциативных объектов / соединительных таблиц / мостовых таблиц (существует много имен)
  • 0
    @Ben Спасибо за советы. Просто читаю об этом сейчас. Ура :-)
Теги:
one-to-many

1 ответ

1
Лучший ответ

Мне кажется, вам нужна таблица мостов, в которой записаны отношения между сотрудниками и реестрами. Что-то вроде этого:

Employee_Handout (ID, EmployeeID, HandoutID)

Каждый раз, когда выдается новый раздаточный материал, вы должны вставлять запись в таблицу раздаточных материалов. Затем, когда данный сотрудник читает этот раздаточный материал, вы должны вставить новую запись в таблицу Employee_Handout. Вам, вероятно, не нужно сохранять нечитаемые данные, так как они легко могут быть обнаружены как отсутствующие в таблице мостов.

Первичный ключ для этого столбца, вероятно, будет (EmployeeID, HandoutID), предполагая, что вам нужна только одна запись, связанная с работником, читающим данный раздаточный материал. Это также означало бы, что данные отношения между сотрудниками и раздаточными материалами могут быть сохранены только один раз.

  • 1
    Ему нужен UNIQUE(EmployeeID, HandoudID) чтобы не было дубликатов.
  • 1
    @LukasS Лучше всего было бы сделать (EmployeeID, HandoutID) первичным ключом.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню