Именование таблиц базы данных и представлений

Недавно я спросил коллегу, почему они включили _TABLE в конце всех имен таблиц своей базы данных. Они сказали, что это был стандарт для другой организации, на которую они работали. Другие коллеги используют V_ в начале просмотра.
Это хорошая практика?

6 ответов

Решение

Последовательность - лучший подход. Добавление _TABLE или _VIEW в конце имени объекта является излишним в моей книге, но если база данных спроектирована таким образом, я не откажусь от соглашения.

Для вашего коллеги перенести его соглашение об именах из предыдущей организации в новую без проверки "местных" стандартов - плохая практика.

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

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

Использование префикса v_ или vw_ может быть полезно, если вы часто читаете запросы SELECT; Вы можете быстро увидеть, выбираете ли вы из вида или таблицы. Представлений с префиксом ИЛИ таблиц с постфиксом должно быть достаточно, нет необходимости в обоих. Мы используем префикс представления.

Кроме того, мы используем префикс "модуль" для кластеризации таблиц и представлений вокруг функциональной группы. Например, связанные с биллингом таблицы называются BIL_*, а связанные с биллингом представления - VW_BIL_*. Именование модуля хранит связанные таблицы и представления рядом друг с другом в SSMS.

Кажется, Акф ответил на вопрос хорошо. И HLGEM делает хорошее замечание о рефакторинге.

Однако я бы добавил этот контраргумент к отсутствию соглашения префикса / суффикса. В SQL Server (и, возможно, в других базах данных) у вас не может быть таблицы и представления с одинаковым именем в одной и той же схеме с одним и тем же владельцем. Это общий шаблон для создания денормализованного представления для таблицы. Если вы не приняли соглашение об именовании, которое отличает представления от таблиц, вы можете получить смешные имена для этих представлений, такие как EMPLOYEE_DENORM вместо EMPLOYEE_V.

Если возникает необходимость в рефакторинге, подобном описанному HLGEM, тогда ваше соглашение об именах может позволить это. Таким образом, эти представления без префикса или суффикса легко идентифицируются как "рефакторинг" представлений.

С http://vyaskn.tripod.com/object_naming.htm:

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

Прочитайте полную статью для деталей о том, как внедрить / создать это в вашей организации.

Я предпочитаю называть свои таблицы во всех camelCase, а также имена полей. Например...

CREATE TABLE [crm].[company]
(
    [id] INT NOT NULL PRIMARY KEY,
    [companyName] NVARCHAR(255) NOT NULL
)

И для представлений я добавляю их со словом "представление". Например...

CREATE VIEW [crm].[viewFullEmployee]
    AS SELECT e.id, e.companyId, e.niceId, e.startDate, e.fullPart, p.firstName, p.middleName, p.lastName, p.active, p.birthDate, p.email, p.alternateEmail, p.phone, p.phoneExt, p.homePhone, p.mobilePhone, p.jobTitle, p.suffix, p.prefix FROM [crm].[Employee] as e FULL JOIN [crm].[person] as p on e.id = p.id

Я также делю все на схемы и не использую схему по умолчанию, вынуждая меня всегда указывать схему для вещей в моих запросах, поскольку в dbo ничего нет.

Я знаю, что что-то - это таблица, из-за отсутствия представления слова перед ней. Это также предотвращает использование таблицы и представления с одинаковым именем.

Я не люблю использовать имена подчеркивания, такие как "employee_v", потому что я генерирую весь свой код уровня данных с помощью шаблонов T4 "PetaPoco", и мне не нравится вводить _ в моем коде при обращении к типу.

Мне просто нравится это лучше

var person = uow.Db.Fetch<Models.viewFullEmployee>("SELECT * FROM [crm].[viewFullEmployee]");

против

var person = uow.Db.Fetch<Models.fullEmployee_V>("SELECT * FROM [crm].[fullEmployee_V]");

Что касается хранимых процедур, я чувствую, что им не нужны префиксы, такие как "sp_", что, как я вижу, делают многие люди. Вы знаете, что это хранимая процедура, используемая из-за префикса EXEC, или Создать процедуру, или Изменить процедуру. Таким образом, я называю свои хранимые процедуры, такие как "addUpdatePerson", "getUserPermissions" и т. Д.

Я использую префикс для функций, таких как "fnValidateEmail", поскольку они могут конфликтовать с именами хранимых процедур.

Я думаю, что одним из лучших ресурсов всегда является база данных AdventureWorks от Microsoft. Если вы посмотрите на их взгляды, они помечают перед ними строчную букву "v".

Например таблица Employee имеет вид vEmployee.

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