Есть ли преимущества для чувствительной к регистру базы данных?
Мы только что "перенесли" базу данных SQL Server 2005 из DEVEL в TEST. Каким-то образом в процессе миграции БД была изменена с нечувствительного к регистру на чувствительный, поэтому большинство SQL-запросов сработало эффектно.
Что я хотел бы знать, так это то, есть ли какие-то явные преимущества в использовании схемы с учетом регистра?
ПРИМЕЧАНИЕ. Под этим я подразумеваю имена таблиц, имена столбцов, имена хранимых процедур и т. Д. Я НЕ имею в виду фактические данные, хранящиеся в таблицах.
При первом осмотре я не могу найти вескую причину, которая дает преимущества по сравнению с нечувствительностью к регистру.
8 ответов
Я только что узнал, почему мы делаем это с учетом регистра. Это делается для того, чтобы при развертывании на клиентском сайте наша БД работала независимо от того, настроен ли клиентский SQL-сервер с учетом регистра или нет.
Это один ответ, которого я не ожидал.
Я действительно не могу придумать причину, по которой идентификаторы SQL должны быть чувствительными к регистру. Я могу думать об одном плохом, о котором MySQL дает, почему их имена таблиц чувствительны к регистру. Каждая таблица представляет собой файл на диске, ваша файловая система чувствительна к регистру, а разработчики MySQL забыли table_file = lc(table_name)
, Это доставляет массу удовольствия, когда вы перемещаете схему MySQL в файловую систему без учета регистра.
Я могу думать об одной большой причине, почему они не должны быть чувствительными к регистру.
Какой-то автор схемы собирается быть умным и решить, что this_table
очевидно означает что-то отличное от This_Table
и сделать эти две таблицы (или столбцы). Вы могли бы также написать "вставить ошибки здесь" в этой точке схемы.
Кроме того, нечувствительность к регистру позволяет вам быть более выразительным в вашем SQL, чтобы подчеркнуть таблицы и столбцы по сравнению с командами, не придерживаясь того, что решил сделать автор схемы.
SELECT this, that FROM Table;
Не все разделы Unicode имеют биективное отображение между прописными и строчными буквами или даже двумя наборами падежей.
В этих регионах "нечувствительность к регистру" немного бессмысленна и, вероятно, вводит в заблуждение.
Это обо всем, что я могу думать сейчас; в наборе ASCII, если вы не хотите, чтобы Foo и foo были разными, я не вижу смысла.
Большинство языков чувствительны к регистру, как и большинство алгоритмов сравнения, большинство файловых систем и т. Д. Независимость от регистра предназначена для ленивых пользователей. Хотя это, как правило, облегчает ввод текста и приводит к тому, что многие варианты с одинаковыми именами отличаются только регистром.
Лично, между (MyTable, mytable, myTable, MYTABLE, MYTable, myTABLE, MyTaBlE), я хотел бы видеть одну универсальную версию.
Мне нравится чувствительность к регистру, в основном потому, что к этому я привык программировать на Perl (и большинство других языков тоже). Мне нравится использовать StudlyCaps для имен таблиц и все строчные буквы с подчеркиваниями для столбцов.
Конечно, многие базы данных позволяют вам заключать в кавычки имена, как это делает Postgres. Это также кажется разумным подходом.
Нечувствительность к регистру - это находка, когда у вас есть разработчики, которые не соблюдают какие-либо соглашения при написании SQL или исходят из языков разработки, где нечувствительность к регистру является нормой, таких как VB.
Вообще говоря, мне проще работать с базами данных, где нет никакой возможности, чтобы ID, id и Id были разными полями.
Кроме личного предпочтения пыток, я настоятельно рекомендую вам оставаться без учета регистра.
Единственная база данных, над которой я когда-либо работал, была настроена на чувствительность к регистру, это Великие равнины. Я обнаружил, что помнить каждый случай их именования схемы было болезненно. У меня не было привилегии работать с более свежими версиями.
Если это не изменилось и если моя память не откажется, характер чувствительности к регистру, о котором вы говорите, определяется во время установки и применяется ко всем базам данных. Это было в случае установки SQL Server, которая управляла базой данных Great Plains, о которой я упоминал, что все базы данных в этой установке чувствительны к регистру.
Я почти уверен, что спецификация SQL требует свертывания регистра (что фактически идентично нечувствительности) для идентификаторов. PostgreSQL сбрасывается в нижнюю, ORACLE - в верхнюю.
Я поддерживаю сервер баз данных Sybase Advantage, и он использует формат плоских файлов, позволяющий использовать DBF, а также наш собственный проприетарный формат ADT. Случай, в котором я вижу проблему чувствительности к регистру, связан с использованием нашей версии сервера для Linux. Linux является чувствительной к регистру ОС, поэтому в нашей базе данных есть опция для строчных букв всех вызовов. Это требует, чтобы файлы таблиц были в нижнем регистре.