使用外键连接多个MySQL表

问题描述 投票:1回答:1

MySQL上有3个不同的表:

  • 客户端
  • 机票
  • 预订

Clients我有

  • name
  • ID
  • 航班号(来自航班表)
  • 预订号码(来自预订表)

Flights我有

  • ID(来自客户)
  • 航班号
  • 公司
  • 日期

Bookings我有

  • ID(来自客户)
  • 订单号
  • 旅馆
  • 入住日期
  • 离开日期

在创建客户端之后,我希望在客户端上创建我在Flights and Bookings表上创建的链接。

因此,每个客户端都有一个ID,该ID也插入到Flights和Bookings表中。我需要将Clients.ID行链接到Flight和Bookings上的行。

外键有可能吗?

我尝试使Clients.ID成为主键,Flights.IDBooking.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代码,对不起,如果我的解释很混乱。

mysql sql foreign-keys insert-into
1个回答
1
投票

您创建了约束,使client成为flightsbookings的子表。因此,您无法创建新客户端(您需要首先在其他两个表中创建父记录)。

在您的数据库设计中,client应该是父表,flightsbookings作为子表。

考虑:

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表中没有意义。这些信息属于子表,可以通过JOINs访问
  • 我建议在所有3个表中将列ID重命名为ClientID;使用一个有意义的名称比一般名称更好。
© www.soinside.com 2019 - 2024. All rights reserved.