2016-06-30 13 views
2

Ich habe eine SQL-Server-Tabelle, auf der ich Account weise Daten einfügen. Die gleiche Kontonummer sollte nicht am selben Tag wiederholt werden, kann aber wiederholt werden, wenn sich das Datum ändert.Sql kombinieren Wert von zwei Spalten als Primärschlüssel

Der Kunde ruft die Daten basierend auf dem Datum und der Kontonummer ab.

Kurz gesagt, die Datum + Kontonummer ist einzigartig und sollte nicht doppelt sein.

Da beide Felder unterschiedlich sind, sollte ich beide verketten und ein drittes Feld als Primärschlüssel erstellen, oder es gibt eine Option, einen Primärschlüssel für den Zusammenführungswert zu haben.

Bitte führen Sie mit dem optimalen Weg.

Antwort

1

Überhaupt nicht. Verwenden Sie einfach eine Primärschlüsselbedingung:

alter table t add constraint pk_accountnumber_date primary key (accountnumber, date) 

Sie auch diese in der create table Aussage enthalten.

Ich könnte jedoch vorschlagen, dass Sie einen automatisch inkrementieren/Identität/serielle Primärschlüssel verwenden - eine eindeutige Nummer für jede Zeile. Dann deklarieren Sie die Kontonummer/Datum-Kombination als eindeutigen Schlüssel. Ich bevorzuge solche synthetischen Primärschlüssel aus verschiedenen Gründen:

  • Sie machen es einfach, auf eine Zeile in Fremdschlüsselbeziehungen verweisen.
  • Sie zeigen die Einfügereihenfolge in der Tabelle an, sodass Sie die zuletzt eingefügten Zeilen sehen können.
  • Sie machen es einfach, eine einzelne Zeile für Updates und Löschungen zu identifizieren.
  • Sie verbergen die "ID" Informationen der Zeile aus verweisenden Tabellen und Anwendungen.
0

Sie können einen zusammengesetzten Primärschlüssel erstellen. Wenn Sie die Tabelle erstellen, können Sie dies in SQL Server durchführen.

CREATE TABLE TableName (
    Field1 varchar(20), 
    Field2 INT, 
    PRIMARY KEY (Field1, Field2)) 

in dieser Frage Werfen Sie einen Blick, welche

mit jedem Geschmack von SQL hilft

How can I define a composite primary key in SQL?

0

Die Alternative einer PK zu haben, die eine selbstinkrementierende Zahl ist und dann einen eindeutigen eindeutigen Index für das setzen natürlicher Schlüssel. Auf diese Weise bleibt die Eindeutigkeit erhalten, aber Sie haben den schnellstmöglichen Beitritt zu allen untergeordneten Tabellen. Wenn die Tabelle nie untergeordnete Tabellen hat, ist das zusammengesetzte PK eine gute Idee. Wenn es viele untergeordnete Tabellen gibt, könnte dies eine bessere Wahl sein.

+1

Sie haben mich auf http://stackoverflow.com/questions/4699125/how-to-use-unique-composite-key hingewiesen und es hat mir geholfen, es zu erreichen :) –