differenza tra chiave primaria e chiave univoca


252

Sto usando il database mysql. Ho una confusione tra chiave primaria e chiave univoca.

Aiutatemi dove devo creare la chiave primaria e unica. Voglio dire in quale situazione creiamo chiave unica o chiave primaria.


9
wrt null-abilità un buon modo per distinguerli in b / n è PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

Risposte:


233

Chiave primaria:

  • Può esserci solo una chiave primaria in una tabella
  • In alcuni DBMS non può essere NULL, ad esempio MySQL aggiungeNOT NULL
  • Chiave primaria è un identificatore chiave univoco del record

Chiave unica:

  • Può essere più di una chiave univoca in una tabella
  • La chiave univoca può avere NULLvalori
  • Può essere una chiave candidata
  • La chiave unica può essere NULL; più righe possono avere NULLvalori e pertanto non possono essere considerate "uniche"

11
Vuoi anche aggiungere che la chiave primaria può essere creata su più colonne, ad esempio chiave primaria (CustomerID, ProductID). Questa si chiama chiave primaria composita. Questo per chiarire il primo punto, poiché potrebbe essere preso così com'è (leggi una chiave => una colonna) dal nuovo arrivato a sql
:)

1
Qual è la tua media di "può essere una chiave candidata"?

1
"è consentito solo un singolo null" - questo non è vero, almeno non per MySQL.
Jānis Elmeris,

69
La chiave univoca può essere nulla e potrebbe non essere univoca. Mezzi ??
Pratik,

20
@PratikCJoshi Probabilmente significa che possono essere più righe con null sulla chiave altrimenti unica.
John,

77

Chiave unica (Regno Unito) : è una colonna o un gruppo di colonne che può identificare un'unicità in una riga.

Chiave primaria (PK) : è anche una colonna o un gruppo di colonne che può identificare un'unicità in una riga.

Quindi la chiave primaria è solo un altro nome per chiave unica, ma l'implementazione predefinita in SQL Server è diversa per chiave primaria e unica.

Di default:

  1. PK crea un indice cluster e il Regno Unito crea un indice non cluster.
  2. PK non è null, ma il Regno Unito consente null (Nota: per impostazione predefinita)
  3. Su un tavolo può esserci solo uno e solo un PK, ma possono esserci più UK
  4. È possibile ignorare l'implementazione predefinita in base alle proprie esigenze.

Dipende davvero qual è il tuo obiettivo quando decidi se creare un Regno Unito o un PK. Segue un'analogia come "Se c'è una squadra di tre persone, quindi tutti sono pari, ma ci sarà uno di loro che sarà una coppia di pari: PK e UK hanno una relazione simile". Suggerirei di leggere questo articolo: L'esempio fornito dall'autore potrebbe non sembrare adatto, ma cerca di avere un'idea generale.

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


leggi circa 10 pagine web, che dicono che PK può contenere più di una colonna. Quindi come può esserci uno e un solo PK su un tavolo?

@android Un PK con più di una colonna funge da singola colonna rispetto all'unicità. Almeno in PostgreSQL, ciò significa che una nuova colonna (con il nome predefinito [table_name]_pkey) viene aggiunta alla tabella (ho sentito che si parla di chiave surrogata). Fonte: postgresqltutorial.com/postgresql-primary-key Sono nuovo in tutto questo, quindi apprezzerei un poster più informato per sottolineare le sfumature che mi sono perso.
Poik,

Va bene, non è una colonna. Ho letto male. È una contrapposizione, non una colonna. C'è ancora l'indice cluster, ma è su due colonne anziché una. E ogni colonna in essa non è una chiave primaria da sola, invece l'intero set è una chiave primaria. Quindi non ci sono più di un PK in questi casi.
Poik,

46

Per un'organizzazione o un'azienda, ci sono così tante entità fisiche (come persone, risorse, macchine, ecc.) Ed entità virtuali (i loro compiti, transazioni, attività). In genere, le aziende devono registrare ed elaborare le informazioni di tali entità aziendali. Queste entità aziendali sono identificate in un intero dominio aziendale da una chiave.

Secondo la prospettiva RDBMS, Key (aka Candidate Key) è un valore o un insieme di valori che identifica in modo univoco un'entità.

Per una DB-Table, esistono così tante chiavi che potrebbero essere idonee per la chiave primaria. In modo che tutte le chiavi, la chiave primaria, la chiave univoca, ecc. Siano chiamate collettivamente come Candidate Key. Tuttavia, DBA ha selezionato una chiave dalla chiave candidata per la ricerca dei record è chiamata chiave primaria.

Differenza tra chiave primaria e chiave unica

1. Comportamento: la chiave primaria viene utilizzata per identificare una riga (record) in una tabella, mentre la chiave univoca serve a prevenire valori duplicati in una colonna (ad eccezione di una voce nulla).

2. Indicizzazione: per impostazione predefinita, il motore SQL crea l'indice cluster sulla chiave primaria se non esiste e l'indice non cluster sulla chiave univoca.

3. Nullability: la chiave primaria non include i valori Null, mentre la chiave unica può.

4. Esistenza: una tabella può avere al massimo una chiave primaria, ma può avere più chiavi univoche.

5. Modificabilità: non è possibile modificare o eliminare i valori primari, ma i valori con chiave univoca possono.

Per ulteriori informazioni ed esempi:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


7
Nel quinto punto dici che non possiamo cambiare o cancellare i valori primari. possiamo sicuramente cambiare i valori primari nella tabella usando un'istruzione update.
Kapil,

3
@Kapil in questo modo batte l'intero scopo dell'uso di una chiave primaria.
Gokigooook

2
indice cluster: le righe sono archiviate fisicamente sul disco nello stesso ordine dell'indice
Duy Đặng

26

Una chiave primaria deve essere unica.

Una chiave univoca non deve essere la chiave primaria - vedi chiave candidata .

Cioè, ci può essere più di una combinazione di colonne su una tabella che può identificare in modo univoco una riga - solo una di queste può essere selezionata come chiave primaria. Gli altri, sebbene unici, sono chiavi candidate.


17

Differenza tra chiave primaria e chiave univoca

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

Puoi trovare informazioni dettagliate da: http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-b Between-Primary-Key-and-Unique-
Key.html


16

Una chiave primaria ha la semantica di identificare la riga di un database. Pertanto, può esistere una sola chiave primaria per una determinata tabella, mentre possono esserci molte chiavi univoche.

Inoltre, per lo stesso motivo, una chiave primaria non può essere NULL (almeno in Oracle, non sicuro di altri database)

Dal momento che identifica la riga non dovrebbe mai cambiare. La modifica delle chiavi primarie è destinata a causare gravi dolori e probabilmente dannazione eterna.

Pertanto, nella maggior parte dei casi, si desidera un ID artificiale per la chiave primaria che non viene utilizzato per l'identificazione di singole righe nella tabella.

Le chiavi univoche d'altra parte possono cambiare quanto vuoi.


22
+1 per menzionare il rischio di dannazione eterna. È tempo di introdurre la teologia nella teoria dei database relazionali.
Neville Kuyt

PK non può essere NULL anche in SQL Server
mrd3650

7

Una chiave primaria è una chiave univoca.

Ogni tabella deve avere al massimo UNA chiave primaria ma può avere più chiavi univoche. Una chiave primaria viene utilizzata per identificare in modo univoco una riga della tabella. Una chiave primaria non può essere NULLpoiché NULLnon è un valore.


6
  • Pensa che il nome della tabella sia dipendente.
  • Chiave primaria
  • La chiave primaria non può accettare valori null. chiave primaria impone l'univocità di una colonna. Possiamo avere una sola chiave primaria in una tabella.
  • Chiave unica
  • La chiave univoca può accettare valori null. chiave univoca impone anche l'univocità di una colonna. puoi pensare se la chiave univoca contiene valori null quindi perché può essere unica? sì, sebbene possa accettare valori nulli, applica l'univocità di una colonna. dai un'occhiata all'immagine. Emp_ID è primario e ID cittadino è univoco. Spero che tu capisca. Possiamo usare più chiavi univoche in una tabella. inserisci qui la descrizione dell'immagine

1
non possiamo inserire più di un valore null nella chiave univoca e non consentirà anche i duplicati.
Masum,

@ mahedi-hasan La colonna chiave unica non dovrebbe avere un solo valore NULL? Come mai le ultime due righe in Citizen ID NULL? Mi sto perdendo qualcosa qui?
supernova,

Ho appena ricevuto risposta al mio commento sopra. Sembra che MySQL consenta NULL multipli in unico, quindi sembra che @Mahedi_Hasan abbia usato MySQL. stackoverflow.com/questions/3712222/…
supernova

6

So che questa domanda ha diversi anni, ma mi piacerebbe fornire una risposta a questo spiegando perché piuttosto che come

Scopo della chiave primaria : identificare una riga in un database in modo univoco => Una riga rappresenta una singola istanza del tipo di entità modellata dalla tabella. Una chiave primaria impone l'integrità di un'entità, AKA Entity Integrity. La chiave primaria sarebbe un indice cluster, ovvero definisce l'ordine in cui i dati vengono archiviati fisicamente in una tabella.

Scopo della chiave univoca: ok, con la chiave primaria abbiamo un modo per identificare in modo univoco una riga. Ma ho un'esigenza aziendale tale che un'altra colonna / un insieme di colonne dovrebbe avere valori univoci. Bene, tecnicamente, dato che questa colonna è unica, può essere un candidato per far rispettare l'integrità dell'entità. Ma per quanto ne sappiamo, questa colonna può contenere dati provenienti da un'organizzazione esterna di cui potrei avere dei dubbi sull'essere univoco. Potrei non fidarmi di esso per fornire l'integrità dell'entità. L'ho solo reso una chiave unica per soddisfare le mie esigenze aziendali.

Ecco qua!


1

Se la progettazione del tuo database è tale che non è necessaria una chiave esterna, puoi scegliere la chiave univoca ( ma ricorda che la chiave univoca consente un valore null singolo ).

Se il database richiede una chiave esterna, si esce senza possibilità di scelta con la chiave primaria.

Per vedere la differenza tra chiave univoca e chiave visita qui


1

Chiave univoca: - Dovrebbe essere usata quando devi dare un valore univoco. Nel caso di una chiave univoca significa che sono ammessi anche valori null. Le chiavi uniche sono quelle chiavi che sono uniche e non simili in quella colonna come ad esempio il nome del tuo animale domestico .it può essere niente come null e se lo si sta chiedendo nel contesto del database, si deve notare che ogni null è diverso da un altro null nel database. EXCEPT-SQL Server dove null = null è true


chiave primaria: - Dovrebbe essere usata quando devi dare univocamente identificare una riga.primary è la chiave che univoca per ogni riga in un vincolo di database è che non consente null in it.so, potresti aver visto che il database avere una colonna che è autoincremento ed è la chiave primaria della tabella. inoltre può essere utilizzato come chiave esterna in un'altra tabella. l'esempio può essere orderId in una tabella ordini , billId in una tabella fatture .

ora tornando alla situazione quando usarlo: -

1) chiave primaria nella colonna che non può essere nulla nella tabella e che stai usando come chiave esterna in un'altra tabella per creare una relazione

2) chiave univoca nella tabella in cui non influisce sulla tabella o nell'intero database se si prende il valore nullo per la colonna specifica come snack nel ristorante, è possibile che non si facciano spuntini in un ristorante


1

differenza tra chiave primaria e chiave univoca

Entrambi Primary keye Unique Keyvengono utilizzati per definire in modo univoco una riga in una tabella. Primary Keycrea una clustered indexcolonna mentre a Unique creates an unclustered index of the column.

A Primary Keynon consente NULL value, tuttavia a Unique Keyconsente one NULL value.


0

Semplicemente la chiave primaria è univoca e non può essere nulla, unica può essere nulla e potrebbe non essere unica.


"unico può essere nullo e potrebbe non essere unico". Cosa may not be uniquesignifica qui?
Yusuf Hassan,

0

Chiavi primarie

Lo scopo principale della chiave primaria è fornire un mezzo per identificare ciascun record nella tabella.

La chiave primaria fornisce un mezzo per identificare la riga, usando i dati all'interno della riga. Una chiave primaria può essere basata su una o più colonne, come nome e cognome; tuttavia, in molti progetti, la chiave primaria è un numero generato automaticamente da una colonna identità.

Una chiave primaria ha le seguenti caratteristiche:

  1. Può esserci solo una chiave primaria per una tabella.
  2. La chiave primaria è costituita da una o più colonne.
  3. La chiave primaria impone l'integrità dell'entità della tabella.
  4. Tutte le colonne definite devono essere definite come NOT NULL.
  5. La chiave primaria identifica in modo univoco una riga.
  6. Le chiavi primarie generano indici univoci CLUSTER per impostazione predefinita.

Tasti unici

Una chiave univoca viene anche chiamata vincolo univoco. È possibile utilizzare un vincolo univoco per garantire che le righe siano univoche all'interno del database.

Non lo facciamo già con la chiave primaria? Sì, lo facciamo, ma una tabella può avere diversi insiemi di colonne che desideri univoche.

In SQL Server la chiave univoca ha le seguenti caratteristiche:

  1. In una tabella possono essere definite più chiavi univoche.
  2. Le chiavi univoche generano indici unici NONCLUSTERATI per impostazione predefinita.
  3. Una o più colonne costituiscono una chiave univoca.
  4. La colonna può essere NULL, ma è consentito un NULL per colonna.
  5. Un vincolo univoco può essere referenziato da un vincolo di chiave esterna.

fonte: qui


0

Le caratteristiche principali di una chiave primaria sono:

Deve contenere un valore univoco per ogni riga di dati. Non può contenere valori null. Solo una chiave primaria in una tabella.

Le caratteristiche principali di una chiave unica sono:

Può anche contenere un valore univoco per ogni riga di dati.

Può contenere anche valori null.

Più chiavi univoche in una tabella.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.