PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Възможно ли е да се наименуват SQL колони с резултати от редове в друга таблица? (Postgres)

Това се основава на основно недоразумение на вътрешната работа на Postgres и EAV дизайни .

Ако нямате стотици различни полета или динамичен набор от типове атрибути, използвайте единична таблица с всички колони - с изключение на нормализиране на база данни . Колоните без стойност се попълват с NULL .
Нулевото хранилище е много евтино , заемащ 1 бит на колона в таблицата за нулева растерна карта, обикновено разпределена в единици от 8 байта, за да покрие 64 колони. Вижте:

Отделен ред за едница допълнителен атрибут заема поне допълнителни 36 байта .

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

Обикновено повече, поради подложката и допълнителните разходи.

Трябва да има стотици различни, рядко попълнени колони, преди такъв тромав дизайн на EAV да може да се изплати - и hstore или jsonb в Postgres 9.4 би било превъзходно решение за това . Едва ли има място между тях за вашия дизайн и ако имаше, вероятно ще използвате enum за типа.

В същото време заявките са по-сложни и скъпи. Тук сме в затруднено положение.

Вместо това използвайте оформление на таблица като това:

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
);

Тясно свързан отговор с повече съвети:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django как да се свържа отново след DatabaseError:изчакване на заявката

  2. Проблем при извличане на записи с празен масив

  3. Грешки в базата данни в Django при използване на нишки

  4. сървърът на възел не може да се свърже с postgres db

  5. Проверка за съществуване на индекс в PostgreSQL