2011-08-25 12 views
5

Potrzebuję użyć kolumny tekstowej jako klucz podstawowy dla mojej bazy danych sqlite. Mam również możliwość użycia funkcji mieszania, aby uzyskać 32-bitowe/64-bitowe int z moich wartości tekstowych (chcę użyć jako klucza podstawowego). Mogę więc użyć wartości int hash zamiast wartości tekstowej jako kluczy podstawowych. Ale następnie muszę przechowywać wartość surowego tekstu dodatkowo w tabeli.sqlite: Czy powinienem użyć kolumny tekstowej jako klucza głównego, czy przekonwertować ją za pomocą funkcji skrótu?

Ale czytałem, że sqlite używa wewnętrznie rowid, więc nie wiem, czy użycie funkcji skrótu i ​​tak pomoże.

Czy sqlite zapisze na swoich stronach wartość wiersza lub tekst (gdy używam go zamiast wartości skrótu)? Kiedy przechowuje wartość tekstową, to myślę, że mogłaby zepsuć strony i użycie wartości mieszania byłoby lepsze.

Ale mam tu brak wiedzy. Mam nadzieję, że możesz mi pomóc.

+0

Dlaczego potrzebujesz/chcesz użyć kolumny tekstowej jako klucza * podstawowego *? – Tim

+0

@Tim, ponieważ jest to klucz, który pobieram dane. Jest to łańcuch o długości około 30 znaków. – Chris

+0

Gdybym zamierzał odwołać się do tego stołu od innego lub innego, wybrałbym liczbę całkowitą autoinkrementującą jako PK i indeks na długim polu: 'select id, longtextvalue od T, gdzie longtextvalue =?'. – Tim

Odpowiedz

1

Niestety tak, wszelkie indeksy na ciągach znaków (w tym użycie jako klucza podstawowego) zajmują podwójne miejsce. Raz dla wartości w wierszu, po raz drugi dla wartości w indeksie.

Jeśli mieszanka spełnia Twoje potrzeby (nie potrzebujesz sortowania, wyszukiwania według zakresów), dobrym pomysłem będzie jej użycie.

1

Jeśli wartości w kolumnie tekstowej mają być unikatowe, to i tak należy umieścić unikatowy indeks w tej kolumnie.

Prawdziwe pytanie nie ma nic wspólnego z kluczami podstawowymi, ma to związek z kluczami obcymi. Jeśli tabela zawiera kolumnę unikalnych liczb całkowitych i kolumnę unikalnego tekstu, możesz użyć jednego jako celu dla odniesienia do klucza obcego. Wszystkie odwołania do klucza obcego do liczby całkowitej będą wymagały sprzężenia; niektóre referencje klucza obcego do tekstu nie będą wymagały sprzężenia. (Ponieważ kluczowa informacja jest przenoszona w kluczu, tylko te zapytania, które potrzebują więcej kolumn poza kluczem tekstowym, będą wymagały złączenia.)

Powiązane problemy