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

Вы можете использовать Perl

$ perl -le ' BEGIN { use Math::BigInt; my $x=Math::BigInt->new("1805334111369276485744644020321551471447190030955050085289"); my $y=Math::BigInt->new("3369574570478873127315415525946742317481702644901195284480"); print $x->bsub($y) } '
-1564240459109596641570771505625190846034512613946145199191
$ perl -le ' BEGIN { use Math::BigInt; my $x=Math::BigInt->new("1805334111369276485744644020321551471447190030955050085289"); my $y=Math::BigInt->new("3369574570478873127315415525946742317481702644901195284480"); printf("%g\n",$x->bsub($y)) } '
-1.56424e+57
$

. Если вы хотите передать эхо-вывод в Perl, тогда

$ echo "1805334111369276485744644020321551471447190030955050085289-3369574570478873127315415525946742317481702644901195284480" | perl -ne ' BEGIN { use Math::BigInt } /(\d+)-(\d+)/; $x=Math::BigInt->new($1); $y=Math::BigInt->new($2); printf("%g\n",$x->bsub($y)) '
-1.56424e+57
$

Как @Pesa. Упомянутое, вы можете использовать bc также

.
$ bc <<< "1805334111369276485744644020321551471447190030955050085289-3369574570478873127315415525946742317481702644901195284480"
-1564240459109596641570771505625190846034512613946145199191
$
11
задан Anthony Mastrean 30 July 2011 в 16:17
поделиться

6 ответов

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

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

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

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

10
ответ дан 3 December 2019 в 01:07
поделиться

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

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

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

25
ответ дан 3 December 2019 в 01:07
поделиться

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

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

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

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

8
ответ дан 3 December 2019 в 01:07
поделиться

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

2
ответ дан 3 December 2019 в 01:07
поделиться

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

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

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

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

-4
ответ дан 3 December 2019 в 01:07
поделиться

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

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

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

    [Property]
    public String Name { get; set; }
}
3
ответ дан 3 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: