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

Làm thế nào để lưu trữ nhiều giá trị trong một cột duy nhất sử dụng ít bộ nhớ hơn?

Nếu một người dùng có thể có nhiều vai trò, có lẽ tốt hơn nên có user_role bảng lưu trữ thông tin này. Nó được chuẩn hóa và sẽ dễ dàng truy vấn hơn nhiều.

Một bảng như:

user_id | role
--------+-----------------
      1 | Admin
      2 | User
      2 | Admin
      3 | User
      3 | Author

Sẽ cho phép bạn truy vấn tất cả người dùng có vai trò cụ thể, chẳng hạn như SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin' thay vì phải sử dụng phân tích cú pháp chuỗi để lấy thông tin chi tiết ra khỏi cột.

Trong số những thứ khác, điều này sẽ nhanh hơn, vì bạn có thể lập chỉ mục các cột đúng cách và sẽ chiếm nhiều không gian hơn bất kỳ giải pháp nào đặt nhiều giá trị vào một cột duy nhất - điều này trái ngược với những gì cơ sở dữ liệu quan hệ được thiết kế.

Lý do không nên lưu trữ điều này là nó không hiệu quả, vì lý do DCoder nói trên nhận xét cho câu trả lời này . Để kiểm tra xem người dùng có vai trò hay không, mọi hàng của bảng người dùng sẽ cần được quét và sau đó cột "vai trò" sẽ phải được quét bằng cách sử dụng đối sánh chuỗi - bất kể hành động này được hiển thị như thế nào, RMDBS sẽ cần thực hiện các hoạt động chuỗi để phân tích cú pháp nội dung. Đây là những hoạt động rất tốn kém và không phải là thiết kế cơ sở dữ liệu tốt.

Nếu bạn cần để có một cột duy nhất, tôi thực sự khuyên bạn nên bạn không gặp phải sự cố kỹ thuật nữa mà là sự cố quản lý con người . Việc thêm các bảng bổ sung vào cơ sở dữ liệu hiện có đang được phát triển sẽ không khó. Nếu đây không phải là việc bạn được phép làm, hãy giải thích lý do tại sao cần có bảng bổ sung cho đúng người - bởi vì munging nhiều giá trị vào một cột duy nhất là một lỗi, xấu ý tưở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. phép tham gia bên ngoài bên trái của mysql

  2. Giới hạn MySQL từ thứ tự giảm dần

  3. Chuyển đổi một hàng thành các cột bằng MySQL mà không sử dụng UNIONS?

  4. Cách cung cấp các truy vấn mysql từ bash

  5. Kiểm tra sức khỏe quan trọng cho máy chủ bản sao nguồn MySQL của bạn