MySQL上有3个不同的表:
在Clients
我有
在Flights
我有
在Bookings
我有
在创建客户端之后,我希望在客户端上创建我在Flights and Bookings表上创建的链接。
因此,每个客户端都有一个ID,该ID也插入到Flights和Bookings表中。我需要将Clients.ID行链接到Flight和Bookings上的行。
外键有可能吗?
我尝试使Clients.ID
成为主键,Flights.ID
和Booking.ID
成为外键,但是当我使用INSERT INTO
时,我得到:
#1452 - 无法添加或更新子行:外键约束失败
SQL查询是:
INSERT INTO clients (name, lastname, id) VALUES ('Jane', 'DOE', 123123123);
用于创建外键的SQL查询是:
ALTER TABLE clients ADD CONSTRAINT fk_flightid FOREIGN KEY (id) REFERENCES flights(id);` and
ALTER TABLE clients ADD CONSTRAINT fk_bookingid FOREIGN KEY (id) REFERENCES bookings(id);`
这是我第一次编写MySQL代码,对不起,如果我的解释很混乱。
您创建了约束,使client
成为flights
和bookings
的子表。因此,您无法创建新客户端(您需要首先在其他两个表中创建父记录)。
在您的数据库设计中,client
应该是父表,flights
和bookings
作为子表。
考虑:
ALTER TABLE flights
ADD CONSTRAINT fk_flights_client_id
FOREIGN KEY (id) REFERENCES client(id);
ALTER TABLE bookings
ADD CONSTRAINT fk_bookings_client_id
FOREIGN KEY (id) REFERENCES client(id);
其他评论:
Flight Number (from Flights table)
和Booking Number (from Bookings table)
在Client
表中没有意义。这些信息属于子表,可以通过JOIN
s访问ID
重命名为ClientID
;使用一个有意义的名称比一般名称更好。