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

Có thể đặt tên cho các cột kết quả SQL từ các hàng trong bảng khác không? (Postgres)

Điều này dựa trên sự hiểu lầm chính hoạt động bên trong của Postgres và thiết kế EAV .

Nếu bạn không có hàng trăm trường khác nhau hoặc một tập hợp động các loại thuộc tính, hãy sử dụng một bảng có tất cả các cột - ngoại trừ chuẩn hóa cơ sở dữ liệu . Các cột không có giá trị được điền bằng NULL .
Bộ nhớ rỗng có giá rất rẻ , chiếm 1 bit mỗi cột trong bảng cho bitmap rỗng, thường được phân bổ theo đơn vị 8 byte để bao phủ 64 cột. Xem:

Một hàng riêng biệt cho một đơn lẻ thuộc tính bổ sung chiếm ít nhất thêm 36 byte .

4  bytes item identifier
23 bytes heap tuple header
1  byte  padding
8  bytes minimum row data size

Thông thường hơn, do đệm và chi phí bổ sung.

Sẽ phải có hàng trăm cột khác nhau, dân cư thưa thớt trước khi một thiết kế EAV khó sử dụng như vậy có thể trả tiền - và hstore hoặc jsonb trong Postgres 9.4 sẽ là giải pháp vượt trội cho điều đó . Hầu như không có bất kỳ khoảng trống nào giữa thiết kế của bạn và nếu ở đó, có thể bạn đang sử dụng enum cho loại.

Đồng thời, các truy vấn phức tạp và tốn kém hơn. Chúng tôi đang ở trong tình trạng khó khăn ở đây.

Thay vào đó, hãy sử dụng bố cục bảng như sau:

CREATE TABLE users (
   users_id serial PRIMARY KEY
 , salutation text
 , given_name text
 , surname text
 , alias text
 ... (many) more columns
);

CREATE TABLE address (
   address_id serial PRIMARY KEY
 , users_id int REFERENCES users
 , city text  -- or separate TABLE city incl region_id etc. ...
 , region_id int REFERENCES region
 , address  text
 ... (many) more columns
);

Câu trả lời liên quan chặt chẽ với nhiều lời khuyên hơ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. Số thuộc tính 10 vượt quá số cột 0

  2. Làm cách nào để thực hiện các truy vấn khi kết nối DB trong Rails?

  3. Lặp lại kích thước mảng trong plpgsql

  4. Sửa các lỗ hổng / khoảng trống trong số được tạo bởi chuỗi Postgres

  5. Cách tạo uuids không có dấu gạch ngang