Konstantin18ko
@Konstantin18ko
Стоматолог

Как правильно создать внешний ключ?

Есть две таблицы: пациенты(имеет ФИО и ДР) и карта пациента(дата поступления, вид оплаты, пациент).
Таблица карта пациента берет значения из таблицы пациент.
CREATE TABLE `card_patient` ( 
  `id_card_patient` int(11) NOT NULL AUTO_INCREMENT, 
  `number_ward` varchar(100) NOT NULL, 
  `card_outpatient` varchar(100) NOT NULL, 
  `pay` varchar(100) NOT NULL, 
  `card_inpatient` varchar(100) NOT NULL, 
  `patient` int(11) NOT NULL, 
  `gender` char(1) NOT NULL, 
  `enter_day` date NOT NULL, 
  `diagnosis` text NOT NULL, 
  `mkb` varchar(100) NOT NULL, 
  `create_string` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  `edite_string` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
  PRIMARY KEY (`id_card_patient`), 
  KEY `card_patient_patient_FK` (`patient`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

CREATE TABLE `patient` ( 
  `id_patient` int(11) NOT NULL AUTO_INCREMENT, 
  `surname` varchar(100) NOT NULL, 
  `name` varchar(100) NOT NULL, 
  `midname` varchar(100) NOT NULL, 
  `birthday` date NOT NULL, 
  `create_string` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  `edite_string` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
  PRIMARY KEY (`id_patient`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

Как заставить ссылаться поле пациент из таблицы карта пациента, на поле ид пациента из таблицы пациент?
Читал в интернете, не смог разобраться.
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Добавить в таблицу `card_patient`:
FOREIGN KEY (`patient`)
  REFERENCES `patient` (`id_patient`)
  ON DELETE CASCADE
  ON UPDATE CASCADE

Только учтите, никакой автоматической связи таблиц при SELECT'е не появится, просто MySQL не даст добавить в поле `card_patient`.`patient` значение, отсутствующее в поле `patient`.`id_patient`.
Ну и, в зависимости от настроек ON DELETE и ON UPDATE можно автоматически удалять и менять `card_patient`.`patient` при удалении/изменении `patient`.`id_patient` или блокировать такое удаление/изменение при существующей связи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы