Зачем использовать мастер для создания базы данных?

12

У меня короткий вопрос, почему я использую use master;для создания базы данных? Вот пример из документации Microsoft

USE master ;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\...\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,  
    FILENAME = 'C:\Program Files\...\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
С Нелл
источник

Ответы:

22

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

  • Восстановить с заменой; или,
  • Удалите текущую базу данных и затем:
    • Создавать с нуля; или,
    • Создать для прикрепления.

Существует множество других сценариев вне создания базы данных, которые также требуют либо (а) не быть в контексте текущей базы данных, либо (б) быть в контексте masterконкретно (или, по крайней мере, не конкретной базы данных), и многих из эти вещи вы можете делать во время или вокруг создания баз данных:

  • Установка базы данных в другое состояние, например single_user
  • Предотвращение ошибок, когда в скрипте есть USEкоманда, но эта пользовательская база данных может быть отключена или недоступна иным образом
  • Предоставление разрешений на уровне сервера, таких как CREATE DATABASE
  • Предоставление членства в роли на уровне сервера
  • Пометка модуля как системного объекта ( sp_MS_marksystemobject) или процедуры запуска
  • Некоторые типы сертификатов, аудит сервера и операции группы доступности

Вероятно, множество других вещей. USE master;не всегда необходимо, но иногда это так, и не мешает всегда выполнять команды уровня сервера из этой базы данных.

Аарон Бертран
источник
17

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

Бижу Хосе
источник
4

Я считаю, что мы очень давно должны были быть мастерами при выполнении команды CREATE DATABASE. Мне лень запускать версию 20 лет, чтобы проверить. Так что, вероятно, сочетание этого и того, что это «естественно», быть мастером. Например, если вы хотите создать папку (представьте, что существует только один уровень папок), вам, вероятно, будет «лучше» сказать «CD \ first» (сравнивая корень здесь с основной базой данных).

Тибор Караси
источник