Qual è la differenza tra una chiave primaria e chiave surrogata?

Ho cercato su google un sacco, ma non ho trovato l’esatta dritto in avanti, rispondere con un esempio.

Qualsiasi esempio di questo sarebbe più utile.

  • da quello che ho capito, Se In una tabella c’è nessun tale attributo che siamo sicuri che lo sarà sempre unica(non nullo), e possono essere la chiave Primaria della tabella, quindi usiamo un artificiale (non derivanti da tabella) attributo(per lo più Auto-Incremento ID) sia la chiave Primaria nella tabella che artificiale colonna è il surrogato come il suo scopo è quello di essere una chiave primaria e non è derivato da tavolo..
InformationsquelleAutor Dom | 2016-04-21

 

6 Replies
  1. 62

    La chiave primaria è una chiave univoca nella tabella che si sceglie che meglio identifica in modo univoco un record nella tabella. Tutte le tabelle devono avere una chiave primaria, perché se avete bisogno di aggiornare o eliminare un record, è necessario sapere come lo identificano in modo univoco.

    Una chiave surrogata è un generati artificialmente chiave. Sono utili per quando il vostro record, essenzialmente, nessun tasto (ad esempio un Person tavolo, dal momento che è possibile che due persone nate nella stessa data, abbiano lo stesso nome, o record in un registro, in quanto è possibile per due eventi accadono tali, essi hanno lo stesso timestamp). Più spesso vedrete questi implementato come numeri interi in un incremento automatico di campo, o come quelli che vengono generati automaticamente per ogni record. I numeri di identificazione sono quasi sempre le chiavi surrogate.

    A differenza di chiavi primarie, non tutte le tabelle hanno bisogno di chiavi surrogate, tuttavia. Se si dispone di una tabella in cui sono elencati gli stati in America, non si ha realmente bisogno di un numero di ID per loro. Si potrebbe utilizzare l’abbreviazione dello stato come chiave primaria codice.

    Il vantaggio principale di la chiave surrogata è che sono facili da garanzia come unico. Lo svantaggio principale è che non hanno alcun significato. Non c’è alcun senso che “28” è Wisconsin, per esempio, ma quando vedi ‘WI’ in Stato colonna della tabella degli Indirizzi, si sa cosa si sta parlando, senza dover cercare in quale stato è che nella tua tabella di Stato.

    • Credo che il principale svantaggio è che a volte quando la gente usa un generata automaticamente chiave (e i numeri interi vengono spesso usato al posto del tasto non solo quando nessun tasto esiste), spesso si dimentica di mettere indici univoci sul tasto che non hanno scelto di fare il PK. Questo permette spesso duplicati per entrare nel sistema che possono creare problemi. I due principali vantaggi di generare automaticamente le chiavi sono generalmente aumentare le prestazioni in join (se i numeri interi non GUID) e impediscono di massa l’aggiornamento di un sacco di record figlio Naturale cambi di tonalità.
    • Certo, io compro quelli. Penso di concentrarsi sulla mancanza di significato perché ho lavorato in hypernormalized sistemi in cui, essenzialmente, ogni campo è stato proprio tavolo. Era impossibile dire dove errori di immissione dei dati si era verificato, e molto difficile applicare le regole di business per individuare i problemi.
    • Amo la normalizzazione ma è possibile infatti prendere troppo lontano.
    • Interessante, dimmi di più. Si sapeva che il tuo amore per la normalizzazione era andato molto lontano, quando…?
    • Immaginate un database che non ha mai permesso di valori null per qualsiasi campo. Come tale, quasi ogni campo nella tabella, e quasi ogni join è un outer join, perché ancora non si hanno dati completi. Così, non hai effettivamente eliminato null, hai appena eliminato conservazione loro. Cercando di convalidare tale sistema con le regole di business per il fatto che è praticamente impossibile, perché è così difficile confrontare i record. Dal momento che ogni relazione potenziale potrebbe essere molti-a-uno, parziale cross join che appare. E l’impatto sulle prestazioni di ogni query di avere decine di join?
    • nessuno dei database consente valori null ovunque. Perché outer join generare null, io non li uso, in qualsiasi database di codice (vista ecc). Applicare il mondo chiuso assunzione cioè una riga in una tabella rappresenta una vera e assenza di tale riga rappresenta false. Inutile dire che io uso il primo ordine logica e rifiutare SQL tre valori di logica, in quanto troppo complicato, inutile e implementato in modo incoerente. Nessuna delle previsioni (business regola di convalida, i tipi di join, prestazioni, ecc) sono vere.
    • tutte le tabelle hanno bisogno di chiavi surrogate”, “non C’è alcun senso che ’28’ è Wisconsin”- sono d’accordo queste due affermazioni; tutto il resto che dici qui è una congettura o una sciocchezza.
    • Mi sono perso in questi ultimi due risposte fino ad ora, ma se si dispone di una risposta diversa alla domanda siete invitati a postare la tua risposta. I nostri commenti qui sono chiaramente off-topic e stiamo parlando solo passato a vicenda.
    • Non credo sia il caso che io a postare una risposta: ho sfidato la congettura ecc nei commenti, downvoted la tua risposta e con voto positivo @sqlvogel risposta.

  2. 6

    Un chiave surrogata è un valore con il solo scopo di identificare univocamente una riga. Di solito, questo è rappresentato da un incremento automatico ID.

    Codice di esempio:

    CREATE TABLE Example
    (
        SurrogateKey INT IDENTITY(1,1) -- A surrogate key that increments automatically
    )

    Un chiave primaria è la colonna di identificazione o un insieme di colonne di una tabella. Può essere surrogata chiave o qualsiasi altra combinazione unica di colonne (per esempio una chiave composta). DEVE essere univoco per ogni riga e non può essere NULL.

    Codice di esempio:

    CREATE TABLE Example
    (
        PrimaryKey INT PRIMARY KEY -- A primary key is just an unique identifier
    )
  3. 3

    Tutti i tasti sono gli identificatori usati come surrogati per le cose che identificare. E. F. Codd spiegato il concetto di assegnato dal sistema surrogati come segue [1]:

    Gli utenti del Database può causare il sistema per creare o eliminare un surrogato,
    ma essi non hanno alcun controllo sul suo valore, né il suo valore di sempre
    visualizzato per loro.

    Questo è ciò che è comunemente indicato come una chiave surrogata. La definizione è subito problematico, però, perché i Codd è stato assumendo che tale caratteristica sarebbe fornito dal DBMS. Dbms, in generale, non hanno tale caratteristica. Le chiavi sono normalmente visibili per almeno alcuni DBMS utenti, per ovvie ragioni, devono essere. Il concetto di un surrogato, pertanto, ha trasformato leggermente in uso. Il termine è generalmente utilizzato nella gestione dei dati di professione, a significare una chiave che non è esposto ed utilizzato come identificatore nel dominio aziendale. Si noti che questo è essenzialmente correlato a come viene generata la chiave o come “artificiale” è percepito. Tutti i tasti sono costituiti di simboli inventati dagli esseri umani o macchine. L’unico senso possibile del termine di surrogati, pertanto, racconta come la chiave, non come viene creato o quello che i suoi valori sono.

    [1] Estendere il database relazionale modello di catturare più di un significato, E. F. Codd, 1979

  4. 1

    Una chiave surrogata è in genere un valore numerico. All’interno di SQL Server, Microsoft consente di definire una colonna con un’identità di proprietà per aiutare a generare la chiave surrogata valori.

    Il vincolo di CHIAVE PRIMARIA identifica in modo univoco ogni record di una tabella di database.
    Chiavi primarie devono contenere i valori UNIVOCI.
    Una colonna di chiave primaria non può contenere valori NULL.
    La maggior parte delle tabelle deve avere una chiave primaria, e ogni tabella può avere solo UNA chiave primaria.

    http://www.databasejournal.com/features/mssql/article.php/3922066/SQL-Server-Natural-Key-Verses-Surrogate-Key.htm

  5. -1

    Penso che Michelle Poolet descrive in modo molto chiaro:

    Una chiave surrogata è un prodotto artificialmente il valore, più spesso un
    sistema di gestione, di incremento del contatore, i cui valori vanno da 1 a
    n, dove n rappresenta una tabella del numero massimo di righe. In SQL Server,
    si crea una chiave surrogata da assegnazione di un’identità, di proprietà di un
    colonna di tipo di dati numerico.

    http://sqlmag.com/business-intelligence/surrogate-key-vs-natural-key

    Di solito consente di utilizzare una chiave surrogata quando si modifica una chiave composta con una colonna identity.

    • Io do -1 perché non spiegare la differenza.

Lascia un commento