Różnica między kluczem podstawowym a unikalnym indeksem w SQL Server [duplikat]
To pytanie ma już odpowiedź tutaj:
Jaka jest różnica między kluczem podstawowym a unikalnym ograniczeniem klucza? 5 odpowiedziMoja firma jest obecnie w trakcie przepisywania aplikacji, którą niedawno nabyliśmy. Zdecydowaliśmy się użyć ASP.net mvc4 do zbudowania tego systemu, a także użyć Entity Framework jako naszej ORM. Poprzedni właściciel firmy, którą przejęliśmy, jest bardzo nieugięty, że używamy ich starej bazy danych i niczego nie zmieniamy, aby klienci mogli korzystać z naszego produktu jednocześnie ze starym systemem podczas opracowywania różnych modułów.
Dowiedziałem się, że stare struktury tabel nie mają klucza podstawowego, a zamiast tego używa unikalnego indeksu jako klucza podstawowego. Teraz, używając frameworku Entity, próbowałem dopasować tabele w strukturze, ale nie byłem w stanie tego zrobić, ponieważ EF generuje klucz podstawowy zamiast unikalnego indeks
Kiedy skontaktowałem się z poprzednim właścicielem i wyjaśniłem to, powiedział mi, że „kluczem unikatowym w każdej tabeli jest klucz podstawowy. Są one dla siebie synonimami”.
Wciąż jestem stosunkowo nowy w systemach baz danych, więc nie jestem pewien, czy jest to poprawne. Czy ktoś może to wyjaśnić?
Tabela po zrzuceniu do SQL generuje:
-- ----------------------------
-- 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
jednak mój system generuje:
-- ----------------------------
-- Primary Key structure for table AT_APSRANCD
-- ----------------------------
ALTER TABLE [dbo].[AT_APSRANCD] ADD PRIMARY KEY ([AC_Analysis_category])
GO
EDYTOWAĆ Dalsze pytanie brzmi: w jaki sposób bym przystąpił do projektowania modeli w tym celu? Jestem przyzwyczajony do używania adnotacji [Klucz], która definiuje go jako klucz podstawowy, a bez niego EF nie wygeneruje tej tabeli. więc coś takiego:
[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; }
}