Tworzę tabelę bazy danych i nie mam przypisanego logicznego klucza podstawowego. Tak więc myślę o pozostawieniu go bez klucza podstawowego, ale czuję się trochę winny. Czy powinienem?
Czy każdy stół powinien mieć klucz podstawowy?
database
database-design
Daniel Silveira
źródło
źródło
Odpowiedzi:
Krótka odpowiedź: tak .
Długa odpowiedź:
W MySQL silnik pamięci InnoDB zawsze tworzy klucz podstawowy, jeśli nie został on wyraźnie określony, tworząc dodatkową kolumnę, do której nie masz dostępu.
Pamiętaj, że klucz podstawowy może być złożony.
Jeśli masz tabelę łączy wiele do wielu, tworzysz klucz podstawowy na wszystkich polach związanych z łączem. W ten sposób upewniasz się, że nie masz dwóch lub więcej rekordów opisujących jeden link.
Oprócz problemów z logiczną spójnością większość silników RDBMS skorzysta z włączenia tych pól do unikalnego indeksu.
A ponieważ każdy klucz podstawowy wymaga utworzenia unikalnego indeksu, należy go zadeklarować i uzyskać zarówno logiczną spójność, jak i wydajność.
Zobacz ten artykuł na moim blogu, aby dowiedzieć się, dlaczego zawsze powinieneś tworzyć unikalny indeks unikatowych danych:
PS Istnieją pewne bardzo, bardzo szczególne przypadki, w których nie potrzebujesz klucza podstawowego.
Najczęściej zawierają tabele dziennika, które nie mają żadnych indeksów ze względu na wydajność.
źródło
Zawsze najlepiej mieć klucz podstawowy. W ten sposób spełnia pierwszą normalną formę i umożliwia kontynuację ścieżki normalizacji bazy danych .
Jak twierdzą inni, istnieją pewne powody, dla których nie trzeba mieć klucza podstawowego, ale większość z nich nie ucierpi, jeśli klucz podstawowy będzie istniał
źródło
Prawie za każdym razem, gdy tworzę tabelę bez klucza podstawowego, myśląc, że nie będę go potrzebował, w końcu wróciłem i dodałem jeden. Teraz tworzę nawet tabele połączeń z automatycznie generowanym polem tożsamości, którego używam jako klucza podstawowego.
źródło
Poza kilkoma bardzo rzadkimi przypadkami (być może tabelą relacji wiele do wielu lub tabelą, której tymczasowo używasz do masowego ładowania ogromnych ilości danych), chciałbym powiedzieć:
Marc
źródło
Po prostu dodaj, później będziesz żałować, kiedy tego nie zrobiłeś (wybierając, usuwając. Linkowanie itp.)
źródło
Czy kiedykolwiek będziesz musiał dołączyć ten stół do innych stołów? Czy potrzebujesz sposobu na jednoznaczną identyfikację rekordu? Jeśli odpowiedź brzmi tak, potrzebujesz klucza podstawowego. Załóżmy, że Twoje dane są czymś w rodzaju tabeli klientów, która zawiera nazwiska osób będących klientami. Może nie być naturalnego klucza, ponieważ potrzebujesz adresów, e-maili, numerów telefonów itp., Aby ustalić, czy ta Sally Smith różni się od tej Sally Smith, i będziesz przechowywać te informacje w powiązanych tabelach, ponieważ osoba może mieć wiele telefonów, dodatków , e-maile itp. Załóżmy, że Sally Smith poślubia Johna Jonesa i staje się Sally Jones. Jeśli nie masz sztucznego klucza na stole, po aktualizacji nazwy zmieniłeś właśnie 7 Sally Smiths na Sally Jones, chociaż tylko jeden z nich się ożenił i zmienił jej imię.
Mówisz, że nie masz naturalnego klucza, dlatego też nie masz żadnych kombinacji pól, aby uczynić go wyjątkowym, dlatego klucz sztuczny jest krytyczny.
Zauważyłem, że za każdym razem, gdy nie mam klucza naturalnego, klucz sztuczny jest absolutną koniecznością do zachowania integralności danych. Jeśli masz naturalny klucz, możesz go użyć jako pola klucza. Ale osobiście, chyba że klucz naturalny jest jednym polem, nadal wolę klucz sztuczny i unikalny indeks klucza naturalnego. Pożałujesz tego później, jeśli go nie włożysz.
źródło
Dobrą praktyką jest mieć PK na każdym stole, ale to NIE MUSI. Najprawdopodobniej będziesz potrzebować unikalnego indeksu i / lub indeksu klastrowego (który jest PK lub nie), w zależności od potrzeb.
Sprawdź sekcję Podstawowe klucze i indeksy klastrowe w Books Online (dla SQL Server)
„ Ograniczenia klucza podstawowego identyfikują kolumnę lub zestaw kolumn, które mają wartości jednoznacznie identyfikujące wiersz w tabeli. Żadne dwa wiersze w tabeli nie mogą mieć tej samej wartości klucza podstawowego. Nie można wprowadzić wartości NULL dla żadnej kolumny w kluczu podstawowym. Mamy zalecamy użycie małej, całkowitej liczby jako klucza podstawowego. Każda tabela powinna mieć klucz podstawowy. Kolumna lub kombinacja kolumn, które kwalifikują się jako wartość klucza podstawowego, nazywana jest kluczem kandydującym. ”
Ale sprawdź to także: http://www.aisintl.com/case/primary_and_foreign_key.html
źródło
Nie zgadzaj się z sugerowaną odpowiedzią. Krótka odpowiedź brzmi: NIE .
Celem klucza podstawowego jest jednoznaczna identyfikacja wiersza w tabeli w celu utworzenia relacji z inną tabelą. Tradycyjnie do tego celu używana jest automatycznie zwiększana wartość całkowita, ale istnieją odmiany.
Zdarzają się jednak przypadki, na przykład rejestrowanie danych szeregów czasowych, w których istnienie takiego klucza po prostu nie jest potrzebne i zajmuje tylko pamięć. Unikanie wiersza jest po prostu ... nie wymagane!
Mały przykład: Tabela A: LogData
Klucz podstawowy nie jest potrzebny.
Tabela B: Użytkownik
Klucz podstawowy (Id) potrzebny do użycia jako „klucz obcy” w tabeli LogData.
źródło
Wiem, że do korzystania z niektórych funkcji widoku siatki w .NET potrzebny jest klucz podstawowy, aby widok siatki mógł wiedzieć, który wiersz wymaga aktualizacji / usunięcia. Ogólną praktyką powinno być posiadanie klucza podstawowego lub klastra kluczy głównych. Ja osobiście wolę ten pierwszy.
źródło
Aby był to dowód na przyszłość, naprawdę powinieneś. Jeśli chcesz go powtórzyć, będziesz go potrzebować. Jeśli chcesz dołączyć do innego stołu, twoje życie (i życie biednych głupców, którzy będą musieli je utrzymać w przyszłym roku) będzie o wiele łatwiejsze.
źródło
Jestem odpowiedzialny za utrzymanie aplikacji stworzonej przez zespół programistów offshore. Teraz mam wiele problemów w aplikacji, ponieważ oryginalny schemat bazy danych nie zawierał PODSTAWOWYCH KLUCZY w niektórych tabelach. Więc proszę, nie pozwól innym cierpieć z powodu twojego złego projektu. Zawsze dobrze jest mieć klucze podstawowe na stołach.
źródło
Zawsze mam klucz podstawowy, nawet jeśli na początku nie mam na to celu. Było kilka razy, kiedy w końcu potrzebowałem PK w tabeli, która go nie ma, i zawsze trudniej jest włożyć go później. Myślę, że zawsze jest coś więcej niż zawsze.
źródło
Krótko mówiąc, nie. Należy jednak pamiętać, że niektóre operacje CRUD z dostępem klienta wymagają tego. W celu korekty w przyszłości zawsze używam kluczy podstawowych.
źródło
Jeśli używasz Hibernacji, nie można utworzyć encji bez klucza podstawowego. Te problemy mogą powodować problemy, jeśli pracujesz z istniejącą bazą danych, która została utworzona za pomocą zwykłych skryptów sql / ddl i nie dodano klucza podstawowego
źródło