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

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

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

Ответы [ 7 ]

25 голосов
/ 27 ноября 2008

Я нахожу венгерские префиксы объектов БД для указания их типов довольно раздражающими.

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

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

10 голосов
/ 27 ноября 2008

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

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

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

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

8 голосов
/ 27 ноября 2008

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

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

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

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

3 голосов
/ 05 июня 2009

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

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

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

    [Property]
    public String Name { get; set; }
}
2 голосов
/ 17 сентября 2011

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

2 голосов
/ 27 ноября 2008

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

0 голосов
/ 27 ноября 2008

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

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

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

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

...