Podkreślenia lub CamelCase w identyfikatorach PostgreSQL, gdy język programowania używa CamelCase?

Przez pewien czas mnie to niepokoiło i nie mogę znaleźć rozwiązania, które wydaje mi siędobrze...

Biorąc pod uwagę język OO, w którym zwykłą konwencją nazewnictwa właściwości obiektu jest CamelCased, i przykładowy obiekt podobny do tego:

{
    id: 667,
    firstName: "Vladimir",
    lastName: "Horowitz",
    canPlayPiano: true
}

Jak powinienem modelować tę strukturę w tabeli PostgreSQL?

Istnieją trzy główne opcje:

niecytowane nazwy kolumn camelCasecytowane nazwy kolumn camelCaseniecytowane (małe litery) nazwy z podkreśleniami

Każdy ma swoje wady:

Niecytowane identyfikatory automatycznie składają się na małe litery. Oznacza to, że możesz utworzyć tabelę za pomocącanPlayPiano kolumna, ale przypadek mieszany nigdy nie dociera do bazy danych. Podczas przeglądania tabeli kolumna zawsze będzie wyświetlana jakocanplaypiano - w psql, pgadmin, wyjaśnij wyniki, komunikaty o błędach, wszystko.

Cytowane identyfikatory zachowują swój przypadek, ale gdy je stworzysz, będzieszzawsze muszę je zacytować. IOW, jeśli utworzysz tabelę za pomocą"canPlayPiano" kolumna, aSELECT canPlayPiano ... zawiedzie. Dodaje to wiele niepotrzebnych szumów do wszystkich instrukcji SQL.

Małe litery z podkreśleniami są jednoznaczne, ale nie odpowiadają dobrze nazwom używanym przez język aplikacji. Musisz pamiętać, aby używać różnych nazw do przechowywania (can_play_piano) i dla kodu (canPlayPiano). Zapobiega również pewnym typom automatyzacji kodu, w których właściwości i kolumny DB muszą być nazywane tak samo.

Więc jestem złapany między skałą a twardym miejscem (i dużym kamieniem; są trzy opcje). Cokolwiek zrobię, jakaś część będzie się czuła niezręcznie. Od około 10 lat korzystam z opcji 3, ale mam nadzieję, że będzie lepsze rozwiązanie.

Jestem wdzięczny za każdą radę, jaką możesz mieć.

PS: Zdaję sobie sprawę, skąd pochodzi składanie i potrzeba cytowania - standard SQL, a raczej adaptacja standardu przez PostgreSQL. Wiem, jak to działa; Bardziej interesuje mnie rada dotycząca najlepszych praktyk niż wyjaśnienia dotyczące sposobu, w jaki PG obsługuje identyfikatory.

questionAnswers(2)

yourAnswerToTheQuestion