Domanda

Posso definire una chiave primaria in base a tre attributi? Sto usando Visual Paradigm e Postgres.

CREATE TABLE answers (
  time                          SERIAL NOT NULL, 
  "{Users}{userID}user_id"     int4 NOT NULL, 
  "{Users}{userID}question_id" int4 NOT NULL, 
  reply                        varchar(255), 
  PRIMARY KEY (time, "{Users}{userID}user_id", "{Users}{userID}question_id"));

Una foto può chiarire la domanda.

È stato utile?

Soluzione

Sì, puoi, proprio come hai mostrato (anche se metto in dubbio la tua denominazione delle colonne 2. e 3.)

Dai docs :

" Le chiavi primarie possono anche vincolare più di una colonna; la sintassi è simile a vincoli univoci:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

Una chiave primaria indica che è possibile utilizzare una colonna o un gruppo di colonne come identificatore univoco per le righe nella tabella. (Questa è una conseguenza diretta della definizione di una chiave primaria. Si noti che un vincolo univoco non fornisce di per sé un identificatore univoco perché non esclude valori nulli.) Ciò è utile sia a fini di documentazione che per applicazioni client. Ad esempio, un'applicazione GUI che consente di modificare i valori di riga probabilmente deve conoscere la chiave primaria di una tabella per poter identificare le righe in modo univoco.

Una tabella può avere al massimo una chiave primaria (mentre può avere molti vincoli univoci e non nulli). La teoria del database relazionale stabilisce che ogni tabella deve avere una chiave primaria. Questa regola non è applicata da PostgreSQL, ma di solito è meglio seguirla. & Quot;

Altri suggerimenti

Sì, puoi. C'è un esempio del genere nella . . Tuttavia, non ho familiarità con i termini tra parentesi che stai utilizzando. Stai eseguendo una valutazione delle variabili prima di creare lo schema del database?

  1. sì, puoi
  2. se lo avessi eseguito, lo vedresti in pochissimo tempo.
  3. Suggerirei davvero, davvero, davvero di ripensare la convenzione di denominazione. colonna temporale che contiene numero intero seriale? nomi di colonna come " {Users} {userID} user_id " ;? oh mio.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top