Czy kolumny tekstowe powinny mieć nałożoną maksymalną długość?

Czy kolumny tekstowe powinny mieć nałożoną maksymalną długość?
bbhzp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 108
0

Cześć,
do tej pory używałem tylko MS SQL Servera, stąd pytanie.

W tym pierwszym zawsze ograniczałem długość kolumn tekstowych, dla uzyskania lepszej wydajności - varchar(50), varchar(255), itd.

Postanowiłem, że w nowych projektach będę używał Postgresa. W dokumentacji i na innych forach wyczytałem, że, w przeciwieństwie do rozwiązania Microsoftu, Postgres nie widzi żadnej różnicy wydajnościowej pomiędzy typami varchar(50) a text - jest to jedynie sposób walidacji długości pól.

Czy zatem tworząc encje w Postgresie powinienem po prostu dawać wszędzie zwykły typ text?

Bazy używam tutaj tylko jako miejsce przechowywania danych - cała logika stoi po stronie aplikacji (w tym sprawdzanie długości pól) - więc nie definiuję żadnych procedur ani funkcji.

Żeby było śmieszniej, gdy wpisałem w internet Postgres example database i wszedłem w grafikę, to wszędzie widzę diagramy relacji, na których jednak są varchar(50), varchar(255), itd :)

Z góry bardzo dziękuję!

Edit: nie zgadzam się ze zmianą tytułu, ponieważ pytanie dotyczy typów w Postgresie, które są inne od typów w innych bazach :)

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9220
5

Jeśli ograniczenie długości tekstu ma jakieś uzasadnienie w logice aplikacji/biznesowej to dajesz varchar. Jeśli nie, to dajesz text - bo w Postgresie z punktu widzenia wydajności i/lub sposobu zapisu w bazie te dwa typy nie mają żadnych różnic i niczego nie zyskasz.

Co do tego, że w przykładach jest podawany typ varchar - wynika to pewnie albo z tego, że ludzie w tutorialach jadą szablonowo i/lub powielają zachowania z minionych lat oraz innych silników, które inaczej alokowały miejsce w bazie dla różnych typów (i wtedy rzeczywiście varchar był wydajniejszy), albo może to wynikać z wymogów aplikacji - żeby np. pole na imię miało ograniczenie długości, a nie że ktoś tam wstawi całego "Pana Tadeusza" ;)

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
2

Jest jedna rzecz którą można sobie strzelić w kolano - jeśli będziesz chciał zmienić maksymalną długość varchara na mniejszą niż aktualnie, to wymaga to przepisania całej tabeli. Lepiej text + constraint na długość.

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
1

Kolejna rzecz na którą warto zwrócić uwagę jest to, że biblioteki klienckie mogą inaczej traktować kolumny typu varchar i text - kolumna typu text może być niekiedy obsługiwana tak jak blob.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.