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

Có lợi thế / bất lợi nào của việc lưu trữ giá trị trường dưới dạng mảng JSON thay vì tạo bảng mới và đặt cược mối quan hệ một-nhiều với chúng?

Theo kinh nghiệm của tôi, điều đó phụ thuộc khá nhiều vào dữ liệu được lưu trữ. Cả hai cách đều có ưu điểm và nhược điểm. Nếu đó là MMORPG trò chơi web sau đó nói rằng bạn có PC có một cái thắt lưng. Và PC có thể đặt các bình thuốc trong vành đai đó để truy cập nhanh trong trận chiến. Vì vậy, chúng tôi muốn lưu id của các lọ thuốc, được lưu trữ trong thắt lưng của nhân vật.

Yêu cầu phổ biến nhất sẽ là "lấy tất cả các lọ thuốc mà nhân vật X có". Và điều đó sẽ chạy khá nhanh trong cả hai trường hợp.

Lợi ích của việc lưu trữ các potion-id này dưới dạng một bảng riêng biệt:

  • Bạn có thể tìm kiếm một id thuốc cụ thể và nó rất nhanh. Ví dụ trong trò chơi:quản trị viên đã xóa một số lọ thuốc khỏi trò chơi và do đó bạn cần cập nhật thắt lưng của mọi người
  • Bạn có thể nhận được một số thống kê đẹp. Ví dụ trong trò chơi:tìm lọ thuốc được sử dụng nhiều nhất trong số tất cả người chơi
  • Cơ sở dữ liệu sẽ duy trì tính toàn vẹn của dữ liệu. Ví dụ trong trò chơi:bạn sẽ không bao giờ gặp phải tình huống khi bạn sử dụng lọ thuốc và trò chơi thông báo "Rất tiếc, lọ thuốc có id đó không tồn tại"
  • Nó tốt cho tính nhất quán. Ví dụ trong trò chơi:bạn lấy một lọ thuốc từ thắt lưng và bỏ vào ba lô. Trò chơi có thể triển khai nó bằng cách gọi một giao dịch với hai câu lệnh SQL rõ ràng đơn giản.
  • Bạn có thể thực hiện THAM GIA. Ví dụ trong trò chơi:chúng tôi cần có danh sách các lọ thuốc trong đai cùng với tên, trọng lượng và hình ảnh của chúng được lưu trữ trong bảng riêng.
  • Bạn có thể cập nhật một mục duy nhất mà không cần cập nhật toàn bộ dây đai. Ví dụ trong trò chơi-bị ép buộc:bạn có một triệu lọ thuốc trong thắt lưng và bạn đã uống một viên.

Lợi ích của việc lưu trữ dưới dạng json:

  • Nếu đó là một trò chơi trình duyệt sử dụng javascript ở phía máy khách, thì bạn nhận được đối tượng Belt json với một yêu cầu đơn giản thay vì thực hiện Truy vấn chọn rồi chuyển đổi thành json
  • Việc duy trì thứ tự các mục dễ dàng hơn nhiều vì các mảng json đã được sắp xếp theo thứ tự. Với phương pháp tiếp cận bảng, bạn sẽ cần cột bổ sung có tên là "đơn hàng" và cập nhật cột đó mọi lúc, đồng thời kiểm tra xem hai mục có cùng thứ tự không, v.v.
  • Bạn có thể thực hiện một loạt việc sắp xếp lại trong Vành đai ở phía máy khách, sau đó nhấp vào "Áp dụng" - bùng nổ, với một truy vấn, bạn có thể cập nhật toàn bộ vành đai. Trong khi với phương pháp tiếp cận bảng, bạn sẽ cần ít nhất hai truy vấn cho điều đó (DELETE + INSERT)
  • ngoài ra, DBMS phổ biến có các plugin hỗ trợ các hàm json trong cơ sở dữ liệu

Điểm mấu chốt:đó không phải là chính ưu điểm và không quan trọng các vấn đề. Tất cả chúng đều có thể giải quyết được và với một thiết kế ứng dụng phù hợp, cả hai giải pháp sẽ hoạt động tốt. Trước khi quyết định cách lưu trữ dữ liệu, hãy tự hỏi bản thân, các trường hợp sử dụng phổ biến nhất cho những dữ liệu này là gì và chọn giải pháp sau đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL trigger:Cập nhật khi đạt đến một ngày giờ nhất định

  2. Bảng Tham gia (bảng liên kết) có khóa chính không? nhiều mối quan hệ

  3. MySQL và PHP - chèn NULL thay vì chuỗi rỗng

  4. Sự khác biệt giữa hai ngày trong MySQL

  5. MySqlDB của Python không được cập nhật hàng