Почему имена таблиц в SQL Server начинаются с "dbo"?

По крайней мере, в моем локальном экземпляре, когда я создаю таблицы, все они имеют префикс "dbo". Это почему?

6 ответов

Решение

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

Если вы используете Sql Server Management Studio, вы можете создать свою собственную схему, выбрав Базы данных - Ваша база данных - Безопасность - Схемы.

Создать его с помощью скрипта так же просто, как (например):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

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

Financial.BankAccounts Financial.Transactions Personal.Address

Вместо того, чтобы использовать схему по умолчанию dbo.

Microsoft представила схему в версии 2008. Для тех, кто не знал о схеме, и тех, кому все равно, объекты были помещены в схему по умолчанию. dbo.

dbo означает владелец базы данных, но это не очень важно.

Представьте схему как папку для файлов:

  • Вам не нужно ссылаться на схему, если объект находится в той же схеме или схеме по умолчанию.
  • Вы можете ссылаться на объект в другой схеме, используя схему в качестве префикса, так же, как вы можете ссылаться на файл в другой папке.
  • У вас не может быть двух объектов с одинаковым именем в одной схеме, но вы можете использовать разные схемы.
  • Использование схемы может помочь вам организовать большее количество объектов
  • Схема также может быть назначена конкретным пользователям и ролям, чтобы вы могли контролировать доступ к тому, кто и что может делать.

Вы всегда можете получить доступ к любому объекту из любой схемы.

Потому как dbo является значением по умолчанию, обычно вам не нужно указывать его в одной базе данных:

SELECT * FROM customers;
SELECT * FROM dbo.customers;

означают то же самое.

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

По большей части схему можно игнорировать. Однако схема будет очевидна в следующих ситуациях:

  1. Если вы просматриваете таблицы либо в навигаторе объектов, либо во внешнем приложении, таком как Microsoft Excel или Access, вы увидите dbo.приставка. Вы все еще можете игнорировать это.

  2. Если вы ссылаетесь на таблицу в другой базе данных, вам понадобится ее полное имя в форме database.schema.table:

    SELECT * FROM bookshop.dbo.customers;
    
  3. По историческим причинам, если вы пишете определяемую пользователем скалярную функцию, вам нужно будет вызвать ее с префиксом схемы:

    CREATE FUNCTION tax(@amount DECIMAL(6,2) RETURNS DECIMAL(6,2) AS
    BEGIN
        RETURN @amount * 0.1;
    END;
    GO
    SELECT total, dbo.tax(total) FROM pricelist;
    

    Это не относится к другим объектам, таким как табличные функции, процедуры и представления.

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

Он является новым для SQL 2005 и предлагает упрощенный способ группировки объектов, особенно в целях защиты объектов в этой "группе".

Следующая ссылка предлагает более подробное объяснение того, что это такое, почему мы будем его использовать:

Понимание различий между владельцами и схемами в SQL Server

Кое-что от Microsoft (Документация)

Пользователь — это специальный пользователь-участник в каждой базе данных. Все администраторы SQL Server, члены sysadminфиксированная роль сервера, saлогин и владельцы базы данных, введите базы данных как пользователь. Пользователь имеет все разрешения в базе данных и не может быть ограничен или удален. обозначает владельца базы данных, но учетная запись пользователя не совпадает с фиксированной ролью базы данных, а db_ownerфиксированная роль базы данных не совпадает с учетной записью пользователя, которая записана как владелец базы данных.
Пользователь владеет схемой. Схема является схемой по умолчанию для всех пользователей, если не указана какая-либо другая схема. dboсхему нельзя сбрасывать. Пользователь dbo владеет схемой dbo. Схема dbo является схемой по умолчанию для всех пользователей, если не указана какая-либо другая схема. Схему dbo нельзя удалить.

DBO — это схема по умолчанию в SQL Server. Вы можете создавать свои собственные схемы, чтобы лучше управлять пространством имен объектов. В качестве лучшей практики я всегда добавляю «DBO». префикс, хотя он и не нужен. Большую часть времени в SQL хорошо быть явным.

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