Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để kiểm tra các bảng được liên kết với khóa ngoại?

Như đã đề cập trong phần nhận xét, bạn phải loại bỏ bất kỳ bảng nào có FK đối lập với các bảng khác, trước tiên, sau đó bạn có thể loại bỏ các bảng đang được liên kết.

Ví dụ:

User
  id: 1
  name: Mike

Address 
  id: 1
  user_id: 1 (FK constraint to User.id table.column)
  address_1: 555 Main Street

Thiết lập này là mối quan hệ 1:1 ( thông tin thêm về chuẩn hóa dữ liệu ), trong đó một hàng người dùng có thể tham chiếu đến một hàng địa chỉ và vì hàng địa chỉ phụ thuộc vào sự tồn tại của hàng người dùng, nếu bạn cố gắng xóa hàng người dùng, bạn sẽ thấy các lỗi mà bạn đã đề cập.

Nhưng nếu bạn bỏ bảng Địa chỉ trước, mọi thứ sẽ hoạt động như mong đợi vì bảng Người dùng không phải là FK cho bất kỳ bảng nào khác.

Đảm bảo tính toàn vẹn của tham chiếu trong lược đồ của bạn đảm bảo rằng bạn không gặp phải các hàng mồ côi, các hàng này sẽ xuyên suốt trong ứng dụng hướng dữ liệu của bạn.

Bạn cũng có thể đưa ra các lệnh sau:

SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;

Nhưng tôi thực sự khuyên bạn không nên làm điều này, vì bạn có thể phá vỡ tính toàn vẹn tham chiếu của dữ liệu của bạn và kết thúc trong một mớ hỗn độn thực sự. Tôi đã thấy ai đó làm điều này trong môi trường doanh nghiệp và họ đã mất hàng tuần để làm sạch nó. Tuy nhiên, nếu bạn đang làm điều này NGHIÊM TÚC cho các mục đích thử nghiệm; như viết bài kiểm tra đơn vị hoặc chỉ học và bạn không muốn bỏ bảng mọi lúc, bạn có thể làm điều này:

# Because we remove the foreign key check, we can truncate in any order
SET foreign_key_checks = 0;
TRUNCATE TABLE user;
TRUNCATE TABLE address;
SET foreign_key_checks = 1;

Thiết kế lược đồ thích hợp bằng cách sử dụng các ràng buộc khóa ngoại sẽ giúp xây dựng một nền tảng tốt cho bất kỳ ứng dụng hướng dữ liệu nào. Sẽ mất thời gian để tìm hiểu thời điểm sử dụng và cách xây dựng các ràng buộc khóa ngoại, nhưng theo thời gian, bạn sẽ bắt đầu hiểu. Một cách tốt để bắt đầu là tải xuống một dự án nguồn mở như magento , wordpress hoặc vbulletin và xem qua các lược đồ của chúng. Bạn thậm chí có thể xem xét các lược đồ này bằng cách sử dụng MySQL workbench và xem Sơ đồ thực thể-mối quan hệ của họ (ERD), sẽ thể hiện trực quan các liên kết giữa các bảng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'IF' trong câu lệnh 'SELECT' - chọn giá trị đầu ra dựa trên các giá trị cột

  2. SQL:NOT IN thay thế để chọn hàng dựa trên giá trị của các hàng * khác nhau *?

  3. mysql_fetch_array không truy xuất tất cả các hàng

  4. Làm cách nào để chuyển một mảng giá trị vào thủ tục đã lưu trữ của tôi?

  5. Chèn dữ liệu vào Mysql bằng tiếng Malayalam