Tôi đang cố gắng quyết định thiết kế cơ sở dữ liệu, với càng ít giả định (liên quan đến cách ứng dụng web thực sự phát triển) càng tốt ở giai đoạn này.
Bước đầu tiên, hiểu rằng THAM GIA rất tốn kém, tôi đang xem xét một số lượng nhỏ các bảng nguyên khối trái ngược với một số lượng lớn các bảng nhỏ hơn được chuẩn hóa. Như một điểm thứ hai, tôi nhầm lẫn giữa việc sử dụng hstore so với các bảng thông thường so với JSONB (với lập chỉ mục GiST).
AFAIK (xin vui lòng sửa):
Nói chung, trong Postgres, hstore được biết là hoạt động tốt hơn các loại dữ liệu khác. Bài thuyết trình này từ FOSDEM PGDAY có một số thống kê thú vị (trong nửa sau của các slide). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Một lợi thế với hstore là lập chỉ mục nhanh (GiN hoặc GiST). Tuy nhiên, với JSONB, lập chỉ mục GiN và GiST cũng có thể được áp dụng cho dữ liệu JSON.
Blog này từ một chuyên gia tại 2nd Quadrant cho biết "Tại thời điểm này, có lẽ nên thay thế việc sử dụng hstore bằng jsonb trong tất cả các ứng dụng mới" (cuộn đến cuối): http://blog.2ndquadrant.com/postgresql-anti-potypes-unn cần thiết -jsonhstore-Dynamic-cột /
Vì vậy, tôi muốn quyết định như sau:
- Đối với phần chính (có cấu trúc) của dữ liệu: nó có nên đi vào một vài bảng quan hệ (tương đối lớn với nhiều cột) hay nên là một số cửa hàng khóa-giá trị sử dụng hstore?
- Đối với dữ liệu ad hoc (do người dùng đóng góp / không có cấu trúc), dữ liệu đó có phải trong kho lưu trữ giá trị khóa JSON hoặc ad hoc trong hstore (với các khóa được lưu trữ trong một trong các bảng quan hệ chính) không?
JSON(B)
vàhstore
(và EAV) là tốt cho dữ liệu có cấu trúc không xác định.