Должны ли мы использовать префиксы в наших соглашениях об именах таблиц базы данных?

Мы определяем соглашение об именах для таблиц, столбцов, процедур и т.д. в нашей команде разработчиков на работе. Именование имен в единственном числе множественное число уже принято, мы используем единственное число. Мы обсуждаем, использовать ли префикс для каждого имени таблицы или нет. Я хотел бы прочитать предложения об использовании префикса или нет, и почему.

Предоставляет ли она какую-либо безопасность вообще (по крайней мере, еще одно препятствие для возможного злоумышленника)? Мне кажется, что более удобно назвать их префиксом, если мы используем имя таблицы в коде, чтобы не путать их с переменными, атрибутами и т.д. Но я хотел бы прочитать мнения более опытных разработчиков.

Ответ 1

Я предпочитаю префиксные таблицы и другие объекты базы данных с коротким именем приложения или решения.

Это помогает в двух возможных ситуациях, которые spring:

  • У вас меньше шансов получить именование конфликтов, если вы решите использовать сторонние компоненты инфраструктуры, которые требуют таблиц в вашей базе данных приложений (например, asp net provider provider).

  • Если вы разрабатываете решения для клиентов, они могут быть ограничены одной базой данных (особенно если они платят за внешний хостинг), требуя, чтобы они хранили объекты базы данных для нескольких приложений в одной базе данных.

Ответ 2

Я нахожу венгерские префиксы объектов DB, ​​чтобы указать их типы, довольно раздражающие.

Я работал в тех местах, где каждое имя таблицы должно начинаться с "tbl" . В каждом случае соглашение об именах в конечном итоге вызывало большую боль, когда кто-то нуждался в том, чтобы внести незначительные изменения.

Например, если ваше соглашение состоит в том, что таблицы начинаются с "tbl" , а представления начинаются с "v", то, что правильно делать, когда вы решите заменить таблицу на другие вещи на бэкэнд и предоставить представление для совместимости или даже в качестве предпочтительного интерфейса? В итоге у нас появились мнения, которые начинались с "tbl" .

Ответ 3

Я не вижу, как любое соглашение об именах может повысить безопасность...

Если злоумышленник имеет доступ к базе данных (с вредоносными разрешениями), у них, безусловно, будут разрешения на список имен таблиц и выберите, для чего они используются.

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

Если таблица с именем (например) 'sro235onsg43oij5' заполнена случайными именами coloumns со случайными строками и номерами, новый разработчик может просто подумать о случайных тестовых данных (если только он не касается кода, который взаимодействует с ним), но если он был назван "userpasswords" или аналогичным любым разработчиком, который смотрит на таблицу, возможно, был бы шокирован тем, что пароли хранятся в открытом тексте.

Ответ 4

Если вы используете SqlServer, хорошим началом будет просмотр выборочных баз данных, предоставленных для некоторых рекомендаций.

Ответ 5

Почему бы не назвать таблицы в соответствии с инструкциями, которые у вас есть для кодирования? Рассмотрим имя таблицы "класс", а столбцы - "свойство" или "поле". Это помогает при использовании ORM, который может автоматически вызывать имена таблиц и столбцов из имен классов/членов.

Например, Castle ActiveRecord, объявленный ниже предполагает имена те же, что и члены, в которых они находятся.

[ActiveRecord]
public class Person
{
    [PrimaryKey]
    public Int32 Id { get; set; }

    [Property]
    public String Name { get; set; }
}

Ответ 6

В прошлом я был против использования префиксов в именах таблиц и имен столбцов. Однако, когда перед вами стоит задача перепроектировать систему, наличие префиксов неоценимо для выполнения поиска и замены. Например, grepping для "tbl_product", вероятно, даст вам гораздо более релевантные результаты, чем grepping для "продукта".

Ответ 7

Если вы беспокоитесь о смешивании имен ваших таблиц, используйте в своем коде систему венгерского обозначения. Возможно, "s" для строки + "tn" для имени таблицы:

 stnUsers = 'users';
 stnPosts = 'posts';

Конечно, префикс зависит от вас, в зависимости от того, насколько вам нравится ваш код... strtblUsers, strtblnmeUsers, thisisthenameofatableyouguysUsers...

Добавление префикса к именам таблиц имеет некоторые преимущества, особенно если вы не перекодируете этот префикс в систему и не изменяете его для каждой установки. Во-первых, вы избегаете риска конфликтов с другими компонентами, как сказал Ян, и, во-вторых, если вы хотите, у вас может быть два или экземпляра вашей программы, запущенных из одной базы данных.