Компонентный ключ как внешний ключ (sql)

вот мои две таблицы, вызывающие озабоченность:

CREATE TABLE IF NOT EXISTS `tutorial` ( `beggingTime` time NOT NULL, `day` varchar(8) NOT NULL, `tutorId` int(3) NOT NULL, `maxMembers` int(2) NOT NULL, `minMembers` int(1) NOT NULL, PRIMARY KEY (`beggingTime`,`day`,`tutorId`), KEY `tutorId` (`tutorId`) ) CREATE TABLE IF NOT EXISTS `group` ( `groupId` tinyint(3) NOT NULL AUTO_INCREMENT, `status` varchar(20) NOT NULL, `groupName` varchar(50) NOT NULL, PRIMARY KEY (`groupId`) ) 

Я хотел бы создать поле в «группе», которое будет ссылаться на составные уникальные ключи в «учебнике». Поэтому, я думаю, мой вопрос: как мне связать эти таблицы? мне нужно создать поле внешних ключей в «группе» для каждого первичного ключа в «учебнике»?

В документации mySQL вы можете настроить сопоставление внешнего ключа для композитов, для чего вам потребуется создать несколько столбцов.

Добавьте столбцы и поместите их в таблицу group

 FOREIGN KEY (`beggingTime`,`day`,`tutorId`) REFERENCES tutorial(`beggingTime`,`day`,`tutorId`) 

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

1] tutorId первую таблицу: сначала поставив tutorId , она автоматически станет ключом сама по себе. Фактически, все, кроме последнего из составных столбцов, становятся ключом.

 CREATE TABLE IF NOT EXISTS `tutorial` ( `beggingTime` time NOT NULL, `day` varchar(8) NOT NULL, `tutorId` int(3) NOT NULL, `maxMembers` int(2) NOT NULL, `minMembers` int(1) NOT NULL, PRIMARY KEY mykey (`tutorId`,`beggingTime`,`day`) ) 

2] Имея так много индексов, очень дорого для тяжелых таблиц записи. Поэтому рассмотрим дополнительное поле в учебнике для использования в качестве внешнего ключа; возможно, auto_increment record_id. Дайте ему несколько мыслей.

  • Группа Hibernate по критерию Объект
  • Как разбить строку имени в mysql?
  • выбор уникальных значений из столбца
  • Что вызывает ERROR: нет уникального ограничения, связанного с заданными ключами для таблицы ссылок?
  • как передать параметры в запрос в SQL (Excel)
  • Как использовать параметры в VBA в разных контекстах Microsoft Access?
  • SQL Выбор между датами
  • Выполнение SQL-запросов в таблице Excel в рабочей книге с помощью макроса VBA
  • Использование Excel VBA для запуска SQL-запроса
  • Запуск SQL-запроса с параметром из Excel 2007
  • Когда использовать одиночные кавычки, двойные кавычки и обратные тики в MySQL
  • Interesting Posts

    Модель Mvvm ViewModel

    В чем разница между CSS-classами .foo.bar (без пробелов) и .foo .bar (с пробелом)

    Эмулятор Android не может запускаться, из-за неправильной папки

    Confused об Angularjs, заключаемых и изолирующих областях и привязках

    Использование генеалогического программного обеспечения для поиска ветвей генеалогического древа

    Ionic – вкладка горизонтальной прокрутки для категорий

    Почему правильный сценарий оболочки дает обернутое / усеченное / поврежденное сообщение об ошибке?

    Поведение статического метода в многопоточной среде в java

    Сравнение каталогов в Windows

    Сохранение заказа смарт-плейлистов на iPhone

    Вычисление нормалей в треугольной сетке

    Как найти максимальное значение и его индекс в массиве в MATLAB?

    Как читать / писать произвольные биты в C / C ++

    Измените вариант enums при перемещении поля в новый вариант

    JSLint сообщает «Небезопасно» для моего регулярного выражения – что это значит?

    Давайте будем гением компьютера.