sql >> Database teknologi >  >> RDS >> PostgreSQL

Er det muligt at navngive SQL-resultatkolonner fra rækker i en anden tabel? (Postgres)

Dette er baseret på en principiel misforståelse af de indre funktioner i Postgres og EAV-designs .

Hvis du ikke har hundredvis af forskellige felter eller et dynamisk sæt af attributtyper, skal du bruge en enkelt tabel med alle kolonner - undtagen databasenormalisering . Kolonner uden værdi er fyldt med NULL .
Nul opbevaring er meget billig , optager 1 bit kolonne i tabellen for null bitmap, typisk tildelt i enheder på 8 bytes til at dække 64 kolonner. Se:

En separat række for en enkelt yderligere attribut optager mindst yderligere 36 bytes .

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

Typisk mere på grund af polstring og ekstra overhead.

Der skulle være hundredvis af forskellige, tyndt befolkede kolonner, før et så uhåndterligt EAV-design kunne betale sig - og hstore eller jsonb i Postgres 9.4 ville være overlegne løsninger til det . Der er næsten ikke plads imellem til dit design, og hvis der var, ville du sandsynligvis bruge en enum for typen.

Samtidig er forespørgsler mere komplicerede og dyre. Vi er i en trang position her.

Brug i stedet et tabellayout som dette:

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

Nært beslægtet svar med flere råd:



  1. Oracle Joins - Sammenligning mellem konventionel syntaks VS ANSI-syntaks

  2. Rollback den indre transaktion af indlejret transaktion

  3. Har SQLAlchemy bool_and aggregeret funktion?

  4. Låser du en MySQL-database, så kun én person ad gangen kan køre en forespørgsel?