¿Subrayados o camelCase en los identificadores de PostgreSQL, cuando el lenguaje de programación usa camelCase?

Esto me ha estado molestando por un tiempo, y no puedo llegar a una solución que se sientaCorrecto...

Dado un lenguaje OO en el que la convención de nomenclatura habitual para las propiedades del objeto es camelCased, y un objeto de ejemplo como este:

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

¿Cómo debo modelar esta estructura en una tabla PostgreSQL?

Hay tres opciones principales:

nombres de columna de camelCase sin comillasnombres de columna camelCase citadonombres sin comillas (en minúsculas) con guiones bajos

Cada uno tiene sus inconvenientes:

Los identificadores sin comillas se pliegan automáticamente a minúsculas. Esto significa que puede crear una tabla con uncanPlayPiano Columna, pero el caso mixto nunca llega a la base de datos. Cuando inspeccionas la tabla, la columna siempre aparecerá comocanplaypiano - en psql, pgadmin, explicar resultados, mensajes de error, todo.

Los identificadores entre comillas mantienen su caso, pero una vez que los crees así, lo harássiempre Tengo que citarlos. IOW, si creas una tabla con un"canPlayPiano" columna, unaSELECT canPlayPiano ... fallará. Esto agrega mucho ruido innecesario a todas las sentencias de SQL.

Los nombres en minúscula con guiones bajos no son ambiguos, pero no se asignan bien a los nombres que usa el lenguaje de la aplicación. Deberá recordar utilizar nombres diferentes para el almacenamiento (can_play_piano) y para el código (canPlayPiano). También evita ciertos tipos de automatización de código, donde las propiedades y las columnas de la base de datos deben tener el mismo nombre.

Así que estoy atrapado entre una roca y un lugar duro (y una piedra grande; hay tres opciones). Hagas lo que haga, alguna parte se sentirá incómoda. Durante los últimos 10 años más o menos, he estado usando la opción 3, pero sigo esperando que haya una solución mejor.

Estoy agradecido por cualquier consejo que pueda tener.

PD: Me doy cuenta de dónde viene el plegado de casos y la necesidad de citas: el estándar SQL, o más bien la adaptación de PostgreSQL al estándar. Sé cómo funciona; Me interesa más el asesoramiento sobre mejores prácticas que las explicaciones sobre cómo PG maneja los identificadores.

Respuestas a la pregunta(2)

Su respuesta a la pregunta