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

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
11
0
10 920
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

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

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

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

Jonathan Leffler 27.11.2008 20:47

Добавление префиксов к именам приложений не добавляет ценности. 1. Сторонние компоненты не должны находиться под той же схемой / владельцем, что и таблицы вашего приложения, чтобы в первую очередь вызвать конфликты имен. 2. Ограничение одной базой данных не означает ограничение одной схемой.

Amit Naidu 29.07.2011 07:30

@AmitNaidu Согласен. Я полностью изменил свое мнение за пять лет, прошедших с момента публикации этого вопроса. Если бы мог, я бы удалил ответ.

Ian Nelson 28.03.2014 21:31

@AmitNaidu а что если Я хочу назвать свою таблицу user, что является зарезервированным словом в PostgreSQL.? Использование префиксов разрешило бы этот конфликт.

ma11hew28 05.05.2016 02:42

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

niico 24.06.2016 18:28

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

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

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

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

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

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

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

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

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

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

niico 24.06.2016 18:40

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

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

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

В любом случае, я считаю, что сегодня венгерская концепция устарела. Думаю, это пережиток тех времен, когда было сложнее все организовать, и иногда название объекта было единственным отличительным признаком.

Chris 27.11.2008 21:00

Думаю, я могу согласиться с вами, если схема по умолчанию либо не используется, либо не установлена. Гораздо сложнее искать варианты использования, если это могут быть «MyTable», «[dbo] .MyTable», «dbo.MyTable», «MyDatabase..MyTable», «MyDatabase .. [MyTable]» и т. Д .; это становится все труднее, когда другие объекты в других схемах в той же базе данных имеют то же имя.

tuespetre 31.03.2014 17:48

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

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

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

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

Новая ссылка для ["предполагается, что имена совпадают"] [github.com/castleproject-deprecated/ActiveRecord/blob/master‌ /…]

iYazee6 06.12.2020 09:31

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

Другие вопросы по теме