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

Cách lưu trữ dữ liệu với số lượng thuộc tính động trong cơ sở dữ liệu

Nếu bạn đã từng lên kế hoạch tìm kiếm các thuộc tính cụ thể, việc sắp xếp chúng thành một cột duy nhất là một ý tưởng tồi, vì bạn sẽ phải sử dụng các hàm trên mỗi hàng để lấy thông tin ra - điều này hiếm khi quy mô tốt.

Tôi sẽ chọn sự lựa chọn thứ hai của bạn. Có danh sách các thuộc tính trong bảng thuộc tính, các đối tượng trong bảng của riêng chúng và một bảng quan hệ nhiều-nhiều được gọi là thuộc tính đối tượng.

Ví dụ:

Các đối tượng
objects:
    object_id    integer
    object_name  varchar(20)
    primary key  (object_id)
attributes:
    attr_id      integer
    attr_name    varchar(20)
    primary key  (attr_id)
object_attributes:
    object_id    integer  references (objects.object_id)
    attr_id      integer  references (attributes.attr_id)
    oa_value     varchar(20)
    primary key (object_id,attr_id)

Mối quan tâm của bạn về hiệu suất đã được ghi nhận nhưng theo kinh nghiệm của tôi, việc tách một cột luôn tốn kém hơn là kết hợp nhiều cột. Nếu có vấn đề về hiệu suất, bạn hoàn toàn có thể chấp nhận được việc phá vỡ 3NF vì lý do hiệu suất.

Trong trường hợp đó, tôi sẽ lưu trữ nó theo cùng một cách nhưng cũng có một cột với dữ liệu được tuần tự hóa thô. Với điều kiện bạn sử dụng trình kích hoạt chèn / cập nhật để giữ cho cột và dữ liệu kết hợp được đồng bộ hóa, bạn sẽ không gặp bất kỳ sự cố nào. Nhưng bạn không nên lo lắng về điều đó cho đến khi một vấn đề thực sự xuất hiện.

Bằng cách sử dụng các trình kích hoạt đó, bạn giảm thiểu công việc cần thiết để chỉ khi dữ liệu thay đổi. Bằng cách cố gắng trích xuất thông tin cột phụ, bạn thực hiện công việc không cần thiết trên mọi chọn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_TYPE () - Nhận loại Giá trị JSON trong MySQL

  2. Chuyển đổi các giá trị âm từ FROM_UNIXTIME

  3. Khi nào đóng con trỏ bằng MySQLdb

  4. Nhận phần trăm Đếm (*) cho số lượng tất cả các mục trong GROUP BY

  5. PHP - Chèn ngày vào mysql