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

Khóa ngoại cho nhiều bảng và cột?

Bạn không cần phải bao gồm tên mục trong cả hai bảng. Đây được gọi là giải pháp không chuẩn hóa. Bạn chỉ nên có nó trong bảng item và chỉ tham chiếu đến id, sau đó nếu bạn cần tên, bạn cũng có thể kết hợp nó dựa trên khóa chính (id). ý kiến.

CREATE TABLE user(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE items(
  i_id INT(11) NOT NULL AUTO_INCREMENT,
  name TINYTEXT NOT NULL,
  price DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (i_id)
);

CREATE TABLE user_purchase(
  i_id INT(11) NOT NULL,
  name TINYTEXT NOT NULL,
  id INT(11) NOT NULL,
  FOREIGN KEY (i_id) REFERENCES items(i_id),
  FOREIGN KEY (id) REFERENCES user(id)
);

Đôi khi khi hiệu suất là rất quan trọng, bạn phải sử dụng các bảng không chuẩn hóa. Nó có thể nhanh hơn nhiều.

Việc chuẩn hóa là rất quan trọng để tránh các dị thường khác nhau. Ví dụ:nếu bạn có một cái gì đó được lưu trữ ở nhiều vị trí, bạn phải chăm sóc để giữ cho tất cả dữ liệu thừa được cập nhật. Điều này cho bạn cơ hội làm điều này không chính xác và kết thúc là có các điểm bất thường khác nhau.

Trong tình huống của bạn, việc có khóa ngoại sẽ giúp bạn giữ toàn vẹn dữ liệu nhưng nếu không có khóa ngoại cho tên, bạn sẽ có thể có các mặt hàng có tên trong giao dịch mua không có trong bảng mặt hàng.

Đây là một dạng bất thường.

Có nhiều loại như vậy, tốt nhất bạn nên tránh chúng chừng nào còn có thể.

Đọc thêm tại đây về các dị thường

Trong một số trường hợp, bạn phải biến đổi kích thước. Vì vậy, hãy lưu trữ một số dữ liệu dư thừa vì các vấn đề về hiệu suất. Bằng cách này, bạn có thể tiết kiệm một số thao tác kết hợp có thể tốn nhiều thời gian.

Chi tiết về quá trình chuẩn hóa được đề cập theo các chủ đề của các dạng chuẩn khác nhau:NF0, NF1, NF2, NF3 và BCNF

Biểu mẫu thông thường chi tiết

Để biết thêm chi tiết về cơ sở toán học của phân rã không thua thành các dạng thông thường cao hơn, hãy xem "Phụ thuộc hàm". Điều này sẽ giúp bạn hiểu tại sao bạn có thể giữ id "thừa". Hầu như chúng là dự phòng cần thiết, vì bạn cần chúng để có thể xây dựng lại tập dữ liệu ban đầu sau này. Đây sẽ là định nghĩa cho các dạng thông thường khác nhau. Mức dự phòng này được cho phép là bao nhiêu?

Sự phụ thuộc chức nă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. CHỌN SQL một-nhiều thành một hàng

  2. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Ubuntu 9.10 (Karmic)

  3. Kéo dữ liệu vào mẫu từ cơ sở dữ liệu bên ngoài với django

  4. Bộ nhớ đệm câu lệnh chuẩn bị với MySQL &JDBC

  5. Cài đặt mysqldb trên Snow Leopard