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

Làm cách nào để gán nhiều id cho một hàng trong MySQL?

Như những người khác đã đề xuất, mối quan hệ nhiều-nhiều được biểu diễn trong mô hình vật lý bằng một bảng nối. Tôi sẽ làm công việc chân và minh họa điều đó cho bạn:

CATEGORY_ITEM là bảng nối. Nó có một PK tổng hợp bao gồm các FK được di chuyển từ hai bảng còn lại. Dữ liệu mẫu ...

DANH MỤC:

CATEGORY_ID CATEGORY
----------- --------
1           Apple
2           Orange

MỤC:

ITEM_ID     NAME
-------     ----
1           Foo
2           Bar

CATEGORY_ITEM:

CATEGORY_ID ITEM_ID
----------- -------
1           1
2           1
1           2

Điều trên có nghĩa là: "Foo là cả Apple và Orange, Bar chỉ là Apple" .

PK đảm bảo bất kỳ tổ hợp danh mục và vật phẩm nào không được tồn tại nhiều hơn một lần. Danh mục được kết nối với mục không phải - nó không thể được kết nối nhiều lần.

Vì bạn chủ yếu muốn tìm kiếm các mục thuộc danh mục nhất định, thứ tự của các trường trong PK là {CATEGORY_ID, ITEM_ID} để chỉ mục cơ bản có thể đáp ứng truy vấn đó. Lời giải thích chính xác tại sao nằm ngoài phạm vi này - nếu bạn quan tâm, tôi nhiệt thành khuyên bạn nên đọc Sử dụng Chỉ mục, Luke ! .

Và vì InnoDB sử dụng tính năng phân cụm , điều này cũng sẽ lưu trữ các mục thuộc cùng một danh mục gần nhau về mặt vật lý, điều này có thể khá có lợi cho I / O của truy vấn ở trên.

(Nếu bạn muốn truy vấn các danh mục của mặt hàng đã cho, bạn cần lật thứ tự các trường trong chỉ mục.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hộp danh sách nhiều lựa chọn của Bang không hiển thị tất cả các Thành phố trong hộp danh sách khác (Php, mysql, ajax)

  2. Đánh giá logic MySQL có lười biếng / ngắn mạch trong mệnh đề JOIN không?

  3. Truy vấn SQL với dữ liệu nhị phân (PHP và MySQL)

  4. Ai đó có thể giới thiệu một hướng dẫn tốt về các chỉ mục MySQL, đặc biệt khi được sử dụng theo thứ tự theo mệnh đề trong một phép nối không?

  5. Có cách nào để bắt lỗi MySQL và cơ sở dữ liệu trong PHP không?