Unterschied zwischen Primärschlüssel und eindeutigem Index in SQL Server [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Was ist der Unterschied zwischen Primärschlüssel und eindeutiger Schlüsselbeschränkung? 5 Antworten

Meine Firma ist gerade dabei, eine kürzlich von uns erworbene Anwendung umzuschreiben. Wir haben uns dafür entschieden, ASP.net mvc4 zu verwenden, um dieses System zu erstellen und das Entity Framework als ORM zu verwenden. Der Vorbesitzer des Unternehmens, das wir erworben haben, ist fest davon überzeugt, dass wir seine alte Datenbank verwenden und nichts daran ändern, sodass Kunden unser Produkt gleichzeitig mit dem alten System verwenden können, während wir die verschiedenen Module entwickeln.

Ich habe herausgefunden, dass die alten Tabellenstrukturen keinen Primärschlüssel haben, sondern einen eindeutigen Index als Primärschlüssel verwenden. Bei Verwendung des Entity-Frameworks habe ich versucht, die Tabellen in der Struktur abzugleichen, konnte dies jedoch nicht, da der EF einen Primärschlüssel anstelle eines eindeutigen Index generiert.

Als ich den Vorbesitzer kontaktierte und erklärte, dass es sich bei dem eindeutigen Schlüssel in jeder Tabelle um den Primärschlüssel handelt, sagte er mir, dass sie Synonyme für einander sind.

Ich bin noch relativ neu in Datenbanksystemen, daher bin ich mir nicht sicher, ob dies korrekt ist. Kann jemand das klären?

Wenn diese Tabelle in SQL ausgegeben wird, wird Folgendes generiert:

-- ----------------------------
-- Indexes structure for table AT_APSRANCD
-- ----------------------------
CREATE UNIQUE INDEX [ac_key] ON [dbo].[AT_APSRANCD]
([AC_Analysis_category] ASC, [AC_ANALYSI_CODE] ASC) 
WITH (IGNORE_DUP_KEY = ON)
GO

jedoch mein System erzeugt:

-- ----------------------------
-- Primary Key structure for table AT_APSRANCD
-- ----------------------------
ALTER TABLE [dbo].[AT_APSRANCD] ADD PRIMARY KEY ([AC_Analysis_category])
GO

BEARBEITEN Nachfolgende Frage zu dieser Frage: Wie würde ich die Modelle dafür entwerfen? Ich bin es nur gewohnt, die Annotation [Key] zu verwenden, die sie als Primärschlüssel definiert, und ohne diese Annotation generiert EF diese Tabelle nicht. also so etwas wie das:

[Table("AT_APSRANCD")]
public class Analysis
{
    [Key]
    public string AnalysisCode { get; set; }
    public string AnalysisCategory { get; set; }
    public string ShortName { get; set; }
    public string LongName { get; set; }
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage