Это беспокоило меня какое-то время, и я не могу прийти к решению, которое кажется правильным ...
Учитывая объектно-ориентированный язык, в котором обычное соглашение об именовании свойств объектов имеет вид camelCased, и пример такого объекта:
{
id: 667,
firstName: "Vladimir",
lastName: "Horowitz",
canPlayPiano: true
}
Как мне смоделировать эту структуру в таблице PostgreSQL?
Есть три основных варианта:
У каждого из них есть свои недостатки:
Идентификаторы без кавычек автоматически преобразуются в нижний регистр. Это означает, что вы можете создать таблицу со столбцом canPlayPiano
, но смешанный регистр никогда не попадет в базу данных. Когда вы просматриваете таблицу, столбец всегда будет отображаться какcanplaypiano
-в psql, pgadmin, объяснить результаты, сообщения об ошибках, все.
Идентификаторы в кавычках сохраняют свой регистр, но как только вы создадите их такими, вам всегда придется заключать их в кавычки. IOW, если вы создадите таблицу со столбцом "canPlayPiano"
, SELECT canPlayPiano...
не удастся. Это добавляет много ненужного шума ко всем операторам SQL.
Имена в нижнем регистре с символами подчеркивания недвусмысленны, но они плохо соответствуют именам, которые использует язык приложения. Вам нужно будет помнить, что для хранения используются разные имена (can_play_piano
). и для кода(canPlayPiano
). Это также предотвращает некоторые типы автоматизации кода, когда свойства и столбцы БД должны называться одинаково.
Так что я зажат между скалой и наковальней (и большим камнем; есть три варианта ). Что бы я ни делал, какая-то часть будет чувствовать себя неловко. Последние 10 лет или около того я использую вариант 3,но я продолжаю надеяться, что будет лучшее решение.
Я благодарен за любой ваш совет.
PS :Я понимаю, что свертывание регистра и потребность в кавычках происходят из -стандарта SQL или, скорее, из адаптации стандарта PostgreSQL. Я знаю, как это работает; Меня больше интересуют советы о лучших практиках, чем объяснения того, как PG обрабатывает идентификаторы.