使用外键连接多个 MySQL 表

Connecting multiple MySQL tables with Foreign Keys

我在 MySQL 上有 3 个不同的 table:

Clients我有

Flights我有

Bookings我有

我想在创建客户后,将我在航班和预订 tables link 上创建的内容应用到客户上。

因此,每个客户都有一个 ID,该 ID 也被插入到航班和预订 table 中。我需要 link 那个 Clients.ID 行到它在航班和预订上的行。

外键可以吗?

我尝试将 Clients.ID 作为主键,将 Flights.IDBooking.ID 作为外键,但是当我使用 INSERT INTO 时,我得到:

#1452 - Cannot add or update a child row: a foreign key constraint fails

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 成为 flightsbookings 的 child table。因此,您无法创建新客户(您需要先在另外两个 table 中创建 parent 记录)。

在你的数据库设计中,client应该是parenttable,用flightsbookings作为child任tables.

考虑:

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 table 中没有意义。这些信息属于childrentable,可以通过JOINs

  • 访问
  • 我建议将所有 3 table 中的列 ID 重命名为 ClientID;使用在功能上有意义的名称优于通用名称。