Должен ли я писать имена таблиц и столбцов ВСЕГДА строчными? - PullRequest
35 голосов
/ 08 января 2010

Интересно, если это проблема, если имя таблицы или столбца содержит заглавные буквы. Что-то позволяет мне верить, что у баз данных меньше проблем, когда все хранится в нижнем регистре. Это правда? Каким базам данных не нравятся символы верхнего регистра в именах таблиц и столбцов?

Мне нужно знать, потому что мой фреймворк автоматически генерирует реляционную модель из ER-модели.

(этот вопрос не о том, хороший это или плохой стиль, а только о технической проблеме для какой-либо базы данных)

Ответы [ 9 ]

20 голосов
/ 08 января 2010

Насколько я знаю, нет проблем с использованием прописных и строчных букв. Одной из причин использования соглашения в нижнем регистре является то, что запросы более читабельны с именами таблиц и столбцов в нижнем регистре и ключевыми словами sql в верхнем регистре:

SELECT column_a, column_b FROM table_name WHERE column_a = 'test'
17 голосов
/ 08 января 2010

Стандарт SQL-92 указывает, что идентификаторы и ключевые слова нечувствительны к регистру (для Руководство по стандарту SQL 4-е издание, Дата / Дарвен)

Это не означает, что конкретная СУБД не является (1) сломанной или (2) настраиваемой (и сломанной)

С точки зрения стиля программирования, я предлагаю использовать разные случаи для ключевых слов и идентификаторов. Лично мне нравятся прописные идентификаторы и строчные ключевые слова, потому что они выделяют данные, которыми вы манипулируете.

15 голосов
/ 08 января 2010

Для базы данных не является технической проблемой наличие заглавных букв в именах таблиц или столбцов для любого механизма БД, о котором я знаю. Помните, что во многих реализациях БД используются имена, чувствительные к регистру, поэтому всегда обращайтесь к таблицам и столбцам, используя тот же регистр, в котором они были созданы (я говорю в общем, поскольку вы не указали конкретную реализацию).

Для MySQL вот некоторая интересная информация о том, как он обрабатывает регистр идентификатора. Есть несколько опций, которые вы можете установить, чтобы определить, как они хранятся внутри. http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

5 голосов
/ 08 января 2010

Насколько я знаю для обыкновенного Л.А.М.П. Настройка не имеет большого значения - но учтите, что MySQL, размещенный в Linux, чувствителен к регистру!

Чтобы сохранить мой код в чистоте, я обычно придерживаюсь имен в нижнем регистре для таблиц и столбцов, кода MySQL в верхнем регистре и смешанных переменных в нижнем регистре - например:

SELECT * FROM my_table WHERE id = '$ myNewID'

4 голосов
/ 29 апреля 2014

Я использую регистр Паскаль для имен полей, нижний регистр для имен таблиц (обычно) следующим образом:

students
--------
ID
FirstName
LastName
Email
HomeAddress

courses
-------
ID
Name
Code
[etc]

Почему это круто? потому что он читается, и потому что я могу разобрать его как:

echo preg_replace('/([a-z])([A-Z])/','$1 $2',$field); //insert a space

СЕЙЧАС, вот самое интересное для столов:

StudentsCourses
--------------
Students_ID
Courses_ID
AcademicYear
Semester

обратите внимание, я прописал S и C? Таким образом, они указывают на основную таблицу (таблицы). Вы могли бы даже написать подпрограмму для логического анализа структуры БД и автоматического построения запросов. Поэтому я использую заглавные буквы в таблицах, когда они являются таблицами JOIN, как в этом случае.

Точно так же думайте о _ как -> в этой таблице как: Студенты-> ID и Курсы-> ID Не student_id - вместо Students_ID - имя поля соответствует точному названию таблицы.

Использование этих простых соглашений дает читабельный протокол, который обрабатывает около 70% вашей типичной реляционной структуры.

3 голосов
/ 31 мая 2017

Стандарт SQL требует имен, хранящихся в верхнем регистре

Стандарт SQL требует, чтобы идентификаторы были сохранены в верхнем регистре. См. Раздел 5.2.13 SQL-92, цитируемый из черновика в этом ответе по другому Вопросу. Стандарт позволяет использовать неограниченное количество идентификаторов в нижнем или смешанном регистре, поскольку процессор SQL требуется преобразовывать по мере необходимости для преобразования в прописную версию.

Это требование предположительно относится к ранним временам SQL, когда системы мэйнфреймов были ограничены только заглавными английскими символами.

Не проблема

Многие базы данных игнорируют это требование стандарта. В частности, Postgres делает прямо противоположное, преобразуя все не заключенные в кавычки («неограниченные») идентификаторы в нижний регистр - несмотря на то, что Postgres в остальном ближе к стандарту, чем любая другая система, о которой я знаю. Некоторые базы данных могут хранить идентификатор в указанном вами случае.

Обычно это не проблема. Практически все базы данных выполняют поиск без учета регистра, начиная с регистра, используемого идентификатором, и регистра, хранящегося в базе данных.

В некоторых случаях возникают странные случаи, когда вам может понадобиться указать идентификатор в сохраненном кейсе или указать заглавные буквы. Это может произойти с некоторыми утилитами, где вы должны передать идентификатор в виде строки вне обычного контекста процессора SQL. Редко, но уберите это в затылок на случай, если вы когда-нибудь столкнетесь с каким-то таинственным сообщением об ошибке «таблица не найдена» при использовании какого-либо необычного инструмента / утилиты. Однажды случилось со мной.

Чехол со змеей

В настоящее время обычной практикой, как представляется, является использование всех строчных букв с подчеркиванием, разделяющим слова . Этот стиль известен как Чехол со змеей .

Использование подчеркивания, а не Верблюжий регистр помогает, если ваши идентификаторы когда-либо представлены как все прописные (или все строчные) и, таким образом, теряют читаемость без разделения слов.


Дополнительный совет: стандарт SQL (раздел 5.2.11 SQL-92) явно обещает никогда не использовать заключительное подчеркивание в ключевом слове. Поэтому добавьте заключительное подчеркивание ко всем вашим идентификаторам, чтобы исключить возможность случайного столкновения.

2 голосов
/ 31 мая 2017

Что бы вы ни использовали, помните, что MySQL в Linux чувствителен к регистру, а в Windows - без учета регистра.

1 голос
/ 02 октября 2010

Если вы используете, например, postgresql и PHP, вам нужно написать запрос следующим образом:

$sql =  "SELECT somecolumn FROM \"MyMixedCaseTable\" where somerow= '$somevar'";

"Заключение в кавычки идентификатора также делает его чувствительным к регистру, тогда как имена без кавычек всегда свертываются в нижний регистр. Например, идентификаторы FOO, foo и" foo "считаются одинаковыми в PostgreSQL, но" Foo "и" FOO "отличаются от этих трех и друг от друга. (Свертывание без кавычек имен в нижний регистр в PostgreSQL несовместимо со стандартом SQL, который говорит, что имена без кавычек должны быть свернуты в верхний регистр. Таким образом, foo должен быть эквивалентен" FOO "не" foo "в соответствии со стандартом. Если вы хотите писать переносимые приложения, советуем всегда указывать конкретное имя или никогда его не указывать.)" http://www.postgresql.org/docs/8.4/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

Так что иногда это зависит от того, что вы делаете ...

0 голосов
/ 08 января 2010

Ни одна современная база данных не может обрабатывать текст в верхнем или нижнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...