Questo mi ha tormenta da un po ', e non posso arrivare a una soluzione che si sente destra ...Sottoscrizioni o camelCase negli identificatori PostgreSQL, quando il linguaggio di programmazione utilizza camelCase?
Dato un linguaggio OO in cui è formato camelCase la solita convenzione di denominazione per le proprietà degli oggetti, e di un esempio oggetto come questo:
{
id: 667,
firstName: "Vladimir",
lastName: "Horowitz",
canPlayPiano: true
}
Come dovrei modellare questa struttura in una tabella PostgreSQL?
ci sono tre opzioni principali:
- nomi delle colonne non quotate camelCase
- nomi delle colonne camelCase citati
- nomi non quotati (minuscolo) con sottolineature
Ognuno di essi hanno i loro inconvenienti:
Gli identificatori non quotati si piegano automaticamente in lettere minuscole. Ciò significa che è possibile creare una tabella con una colonna
canPlayPiano
, ma il maiuscolo non raggiunge mai il database. Quando controlli la tabella, la colonna apparirà sempre comecanplaypiano
- in psql, pgadmin, spiega risultati, messaggi di errore, tutto.Gli identificatori citati mantengono il loro caso, ma una volta che li crei in questo modo, dovrai indicare sempre. IOW, se si crea una tabella con una colonna
"canPlayPiano"
, unSELECT canPlayPiano ...
avrà esito negativo. Questo aggiunge un sacco di rumore inutile a tutte le istruzioni SQL.I nomi in minuscolo con caratteri di sottolineatura non sono ambigui, ma non si adattano bene ai nomi utilizzati dalla lingua dell'applicazione. Dovrai ricordarti di usare nomi diversi per la memorizzazione (
can_play_piano
) e per il codice (canPlayPiano
). Impedisce inoltre determinati tipi di automazione del codice, in cui le proprietà e le colonne DB devono essere identificate come stesse.
Quindi sono preso tra una roccia e un luogo duro (e una grossa pietra, ci sono tre opzioni). Qualunque cosa faccia, una parte si sentirà a disagio. Negli ultimi 10 anni ho usato l'opzione 3, ma continuo a sperare che ci sarebbe una soluzione migliore.
Sono grato per ogni consiglio che potresti avere.
PS: Mi rendo conto di dove si stia piegando il caso e della necessità di virgolette - lo standard SQL, ovvero l'adattamento dello standard di PostgreSQL. So come funziona; Sono più interessato alla consulenza sulle best practice che alle spiegazioni su come PG gestisce gli identificatori.
Anche se si va con tutto minuscolo, vi consiglio di avere il vostro livello di astrazione del database avvolgere sempre tutti gli identificatori con le citazioni nelle query generate. Non è sempre possibile prevedere quali nuove parole chiave verranno utilizzate in una nuova versione, in modo da ottenere protezione dai nomi in conflitto citando. – kgrittn
Non esiste una "migliore pratica". Metà del mondo preferisce i underscore, l'altra metà lo detesta. La metà del mondo preferisce i cappucci iniziali, l'altra metà lo detesta. La metà del mondo preferisce non distinguere tra maiuscole e minuscole, l'altra metà lo detesta. Mai nessuna di queste coppie di metà giunge ad un accordo, perché quelle questioni sono puramente soggettive. Fatti un favore e comincia a preoccuparti di ciò che conta davvero: scrivere un codice che faccia ciò che deve fare. –
Puoi condividere la soluzione alternativa che hai utilizzato? Sto passando per la stessa situazione, ho proprietà oggetto in CamelCase che ho bisogno di mappare con colonne della tabella che sono in pattern di sottolineatura. Ho trascorso alcune ore, ma non ho ancora trovato una buona soluzione. –