我在MySQL上有3个不同的表:
我在Clients
上
我在Flights
上
我在Bookings
上
我希望在创建客户之后,将我在“航班和预订”表上创建的内容链接到客户上。
因此,每个客户都有一个ID,该ID也插入了Flight和Bookings表。而且我需要将Clients.ID行链接到“航班和预订”行。
外键有可能吗?
我尝试将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,对不起,如果我的解释太乱了。
答案 0 :(得分:1)
您创建的约束使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
我建议将所有3个表中的列ID
重命名为ClientID
;使用有意义的名称要比通用名称更好。