Piszę swoją pierwszą aplikację na Androida i będę korzystał z bazy danych SQLite, więc będę starał się jak najbardziej ograniczyć rozmiar, ale myślę, że pytanie dotyczy ogólnie projektowania bazy danych.
Planuję przechowywać rekordy, które będą miały tekst i datę utworzenia. Aplikacja jest samodzielną aplikacją, tzn. Nie będzie łączyła się z Internetem i tylko jeden użytkownik będzie ją aktualizował, więc nie ma szans, że będzie więcej niż jeden wpis z określoną datą.
Czy moja tabela nadal potrzebuje kolumny identyfikatora? Jeśli tak, jakie są zalety używania identyfikatora jako identyfikatora rekordu w porównaniu z datą?
Odpowiedzi:
IMHO najlepiej unikać kolumny danych jako klucza podstawowego.
Pracowałem w systemach, w których pole daty jest używane jako klucz podstawowy, a pisanie zapytań w celu wycofania podzbiorów danych jest nieco uciążliwe, jeśli pracujesz z polami daty.
Niektóre inne kwestie, które warto rozważyć:
Możesz pomyśleć, że moment w czasie jest wyjątkowy, ale zależy to raczej od szczegółowości kolumny daty. Czy to minuty, sekundy, milisekundy itp. Czy możesz być absolutnie pewien, że nigdy nie otrzymasz naruszenia klucza podstawowego?
Wreszcie, jeśli chcesz przenieść bazę danych na inną platformę, możesz ponownie napotkać problemy, w których ziarnistość danych daty różni się między platformami.
Oczywiście musisz zrównoważyć ideał z tym, z czym musisz pracować. Jeśli przestrzeń jest tak istotnym problemem, użycie kolumny daty może być mniejszym z dwóch zła. To decyzja projektowa, którą musisz podjąć.
Edytować:
Powinienem zaznaczyć, że w żaden sposób nie świadczy to o złej decyzji projektowej. Tyle, że mogą występować problemy z praktycznymi aspektami omawianego RDBMS.
źródło
Nie, nie potrzebujesz ściśle kolumny identyfikatora zdefiniowanej w schemacie, jeśli możesz zagwarantować, że nigdy nie będzie zduplikowanej daty.
ALE ...
... powiedziawszy, równie dobrze możesz go użyć. Mały sekret polega na tym, że SQLite ma już unikalny, automatycznie zwiększający się identyfikator dla każdej tabeli o nazwie ROWID. Jeśli zadeklarujesz kolumnę z automatyczną inkrementacją liczb całkowitych w swojej tabeli jako PK, SQLite nie utworzy nowej kolumny - po prostu alias tej wcześniej istniejącej kolumny ROWID.
http://www.sqlite.org/autoinc.html
Więc nie będziesz oszczędzać miejsca, nie używając kolumny identyfikatora, ponieważ dostajesz jedną na tabelę, czy chcesz, czy nie!
źródło
Użyj pola identyfikatora, jeśli spełniony jest dowolny z poniższych warunków:
Przeczytaj to pytanie: Czy istnieje źródło kanoniczne wspierające „surogatów”?
Edytować:
Ponieważ, moim zdaniem, żadne z powyższych nie jest prawdziwe, nie musisz używać pola identyfikatora, ale możesz użyć jednego, jeśli chcesz.
źródło
Pamiętaj, że możesz również chcieć zmienić znaczenie kolumny „data” z
created_at
naupdated_at
lub dowolną inną zmianę wzdłuż tych linii, co uważam za bardzo częsty przypadek.Dodanie kolumny identyfikatora w niektórych przypadkach zapewni większą elastyczność przy zmianie projektu.
źródło