Хорошо, первое, что я сказал о механизме хранения, это то, что не все механизмы хранения поддерживают ограничения внешнего ключа.
Механизм хранения - это система, которая управляет таблицей и данными, существует несколько механизмов хранения, таких как: MyISAM или InnoDb. (С MySQL 5.6 InnoDB по умолчанию)
Каждый механизм хранения имеет свои особенности и уникальные характеристики, которые можно использовать в определенных c ситуациях. Большую часть времени вы не «заботитесь» о подсистеме хранилища, если вы не хотите использовать некоторые специфические c функции.
Если вы не уверены, какой механизм хранилища выбрать, просто придерживайтесь значения по умолчанию и используйте InnoDB
Для получения дополнительной информации о механизмах хранения см. справочное руководство MySQL. (Я настоятельно рекомендую вам, если вы хотите учиться и понимать)
https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html
Я думаю, что проблема заключается в этот столбец Client_ID
в бронировании не является индексированным полем. Если я изменю определение таблицы и добавлю к ней ограничение INDEX, все будет работать.
create table Bookings( Booking_ID varchar(9) NOT NULL, Client_ID varchar(6) NOT NULL, PT_ID varchar(4) NOT NULL, Booking_Date Date NOT NULL, Start_Time time NOT NULL, End_Time time NOT NULL, Focus_ID varchar(3) NOT NULL, Staff_ID varchar(4) NOT NULL, PRIMARY KEY (Booking_ID), INDEX (Client_ID) );
INSERT INTO Bookings
VALUES
('B00000001','C00001','T001','2020-01-1','19:30:00','20:15:00','F01','S002'),
('B00000002','C00023','T001','2020-01-1','09:00:00','09:30:00','F02','S001'),
('B00000007','C00156','T003','2020-01-1','10:00:00','11:00:00','F04','S003');
create table Client(
Client_ID varchar(6) NOT NULL,
Client_Name varchar(20) NOT NULL,
Height_cm decimal(5,2) NOT NULL,
Weight_kg decimal(6,2) NOT NULL,
Ph_Num varchar(14) NOT NULL,
PRIMARY KEY (Client_ID),
FOREIGN KEY (Client_ID)
REFERENCES Bookings(Client_ID)
);