Po to, żeby być czystym.
Najlepszym sposobem jest kolumna na każdej tabeli, z której rozwijane są źródła.
A oto dlaczego ...
"nie powinien się martwić o miejsce, gdy Zapisywanie danych w bazie danych?"
Krótka odpowiedź brzmi: nie. Dłuższą odpowiedzią jest powód do obaw. Koncentrowanie się na kosmosie doprowadzi cię do robienia bardzo złych rzeczy.
Złe rzeczy, które możesz zrobić, jeśli przestrzeń jest problemem.
- Pogrzebacie znaczenie w kluczach podstawowych. tj. inteligentne klucze.
- Będziesz próbował przechowywać wartości mulitple w jednej kolumnie.
- Będziesz indeks zbyt mało
- (bez wątpienia moglibyśmy stworzyć listę 50 złych praktyk, które oszczędzają przestrzeń)
Załóżmy, że istnieją 50 sklepy (zaznacz pole z 50 możliwych wartości) . W tym przypadku, aby zapisać domyślny sklep ty potrzebę 50 boolean Fields,
No to ONE logiczna kolumna. Istnieje w każdym rzędzie.
Pozwól, że Cię o to zapytam. Jeśli utworzyłeś tabelę z 1 kolumną z datą i wstawiłeś 1 wiersz, ile miejsca chcesz użyć na dysku?
Jeśli powiedziałeś 7 lub 8 bajtów, to jesteś wyłączony około 1000 razy.
Najmniejsza jednostka miejsca na dysku to blok. Bloki są typowymi 8 KB (the może być tak mały, jak 2KB tak duże jak 32KB, w ogóle (bez nitpicking tutaj, rzeczywiste granice są nieistotne))
Powiedzmy masz 8kB bloki wówczas 1 kolumna 1 wiersz tabela zajmuje 8Kb. Jeśli wstawisz kolejne 999 wierszy, to nadal będzie to 8KB. (Znowu nie nitpicking jest narzut na blok, a za wiersz - to przykład)
Więc w swoim wyglądzie górę tabeli z 50 nazw sklepów, prawdopodobieństwo, że dodanie 50 bajtów do wielkości sił stołowych do rozwinięcia od 1 bloku do 2 jest niewielkie lub zupełnie nieistotne.
Z drugiej strony, domyślna tabela z pewnością zajmie co najmniej jeden dodatkowy blok. Ale najgorsze trafienie na PERFORMANCE polega na tym, że Twój telefon, aby wypełnić listę rozwijaną, będzie wymagał dwóch podróży w obie strony do bazy danych, jednej do uzyskania listy, drugiej do uzyskania wartości domyślnej. (tak, możesz być w stanie zrobić to w jednym, ale przejść z nim)
Dzięki temu zaoszczędziłeś dokładnie zero miejsca i podwoiłeś ruch sieciowy.
Widzisz, co mówię.
Innym kluczowe powód, aby przestać się martwić o miejsca to dajesz się jasność. pomyśl o programiście, którego zamierzasz zatrudnić, aby uruchomić tę aplikację. Kiedy dołącza do zespołu i patrzy na bazę danych, wyobraź sobie dwa scenariusze.
- Istnieje kolumna logiczna o nazwie DEFAULT_VALUE
- Istnieje stół bez relacji do wszystkiego, co jest nazwane Default_Values
Pytasz mu zbudować nowy na z listy rozwijanej dla „sklepu”.
W scenariuszu 1 znajduje tabelę magazynu, wyświetla listę rozwijaną w prostym zapytaniu do tabeli i używa pola default_value do wyboru wartości początkowej.
W scenariuszu 2, bez jakiegoś szkolenia, jak on będzie wiedział, aby szukać oddzielnej tabeli? Może on zobaczy ten stół, ale do czasu, gdy będziesz zatrudniany, twój datamodel ma teraz setki stołów.
Ponownie, trochę wymyślne, ale punkt jest istotny. Klarowność w bazie danych jest dobra, warta bajta na wiersz.
rzeczy techniczne
Nie jestem facetem, ale w MySQL Oracle, null kolumna na końcu rzędu podjąć żadnej dodatkowej przestrzeni. W Oracle użyłbym Varchar2 (1) i niech 'T' = Default i pozostawi pozostałe null. To by miało wpływ tylko na użycie 1 bajtu sumy dodatkowej, a nie na wiersz. YMMV z MySQL, możesz zadać to pytanie osobno, jeśli nie możesz znaleźć odpowiedzi w Google.
Ale czas, aby się o to martwić, dotyczy milionów wierszy, a nie setek. Dowolny stół, który podaje rozwijane menu, nigdy nie będzie wystarczająco duży, aby zacząć martwić się o dodatkowe bajty.
Po pierwsze, co robi wartość domyślna? Po drugie, czy jest to wartość domyślna dla jednej tabeli czy jedna dla każdego użytkownika? Kiedy mówisz (aby użytkownik mógł je zmienić) wydaje się, że KAŻDY użytkownik miałby zestaw wartości domyślnych. Czy masz na myśli, że użytkownik ADMIN może zmienić ustawienia domyślne? Na koniec, czemu sprzeciwiasz się kolumnie is_default? Jaki byłby problem z tym? –
W moim przypadku, każda tabela przechowuje wszystkie możliwe wartości pola wyboru. W każdym polu wyboru znajduje się jedna wartość domyślna (lub zero, jeśli nie ma wartości domyślnej). Nie mam nic przeciwko użytkownikom. Załóżmy, że tylko jeden użytkownik (np. Admin) może zmienić domyślną. Jeśli chodzi o kolumnę 'is_default': załóżmy, że jest 50 sklepów (pole wyboru z 50 możliwymi wartościami). W tym przypadku do przechowywania domyślnego sklepu potrzebujesz 50 pól logicznych, a nie 1. Innymi słowy, nie chcę wydawać miejsca. Czy nie powinienem martwić się o miejsce podczas zapisywania danych w bazie danych? –
Jak chcesz, aby domyślny działał? Czy jest to dla interfejsu użytkownika, aby pole wyboru sklepów domyślnie było ustawione na Ebay? Czy jest to dla zaplecza bazy danych, aby przechowywać Ebay w sklepie, jeśli użytkownik nie wybrał sklepu? –