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

Hvordan og hvorfor tilføjer jeg primærnøgler til min SQL-databasetabel, når jeg allerede har et indeks

En primær nøgle er en begrænsning, der specificerer, at værdierne i dens kolonne(r) skal være (gensidigt) unikke og ikke null. Dette er for at det kan garanteres entydigt at identificere hver række i tabellen, hvilket er mest nyttigt, når man ønsker at oprette fremmednøgler, der refererer til denne tabel. Det er stadig værd at have, hvis du ikke har andre tabeller, da det vil forhindre, at dit bord kommer i en dårlig tilstand, hvor du for eksempel har mere end én af samme kildeværdi på en bestemt dato.

De(n) primære nøglefelt(er) vil næsten altid have et indeks på sig, ligesom de ofte bruges til opslag og JOINs, men de to begreber er adskilte.

Nogle DBMS'er (f.eks. MySQL, SQL Server) opretter automatisk et klynget indeks på den primære nøgle, hvilket betyder, at data i tabellen sorteres på disken efter det eller de felter, der omfatter den primære nøgle for at gøre de almindelige operationer ovenfor endnu hurtigere. Men postgres ikke gør dette som standard.

Du kan angive den primære nøgle ved tabeloprettelse ved hjælp af følgende syntaks:

create table datatable 
(
    date date, 
    yesterday real, 
    today real, 
    tomorrow real, 
    reading real, 
    source varchar,
    PRIMARY KEY (source, date)
)

Du kan også tilføje et nyt, automatisk stigende heltalsfelt til at fungere som din primære nøgle (generelt omtalt som en surrogatnøgle eller kunstig nøgle ). Du vil måske gøre dette, hvis du ikke har andre gode kandidater i dine dataelementer, men det kan også have andre fordele (potentielt hurtigere JOINs for eksempel).

create table datatable 
(
    id serial primary key,
    date date, 
    yesterday real, 
    today real, 
    tomorrow real, 
    reading real, 
    source varchar
)



  1. Konverter SQL Server-lagret procedure til PostgreSQL-lagret procedure

  2. Hvordan tilføjer jeg indekser til MySQL-tabeller?

  3. Django emulerer databasetriggeradfærd ved masseindsættelse/opdatering/sletning

  4. Hvordan bruger du scriptvariabler i psql?