Po co używać master do tworzenia bazy danych?

12

Mam krótkie pytanie, dlaczego używam use master;do tworzenia bazy danych? Oto przykład z dokumentacji 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 ) ;
S Nell
źródło

Odpowiedzi:

22

W tym bardzo szczególnym przypadku nie jest to absolutnie wymagane, ale jest wymagane w wielu innych scenariuszach. Jeśli tworzysz bazę danych o nazwie Salesi masz bazę danych o nazwie Sales, musisz zmienić kontekst bazy danych przed:

  • Przywróć z zamień; lub,
  • Upuść bieżącą bazę danych, a następnie:
    • Twórz od podstaw; lub,
    • Utwórz do załączenia.

Istnieje wiele innych scenariuszy poza tworzeniem bazy danych, które również wymagają (a) nie bycia w kontekście bieżącej bazy danych lub (b) bycia w kontekście masterkonkretnej (lub przynajmniej nie określonej bazy danych) i wielu te rzeczy, które możesz robić podczas tworzenia baz danych lub w ich pobliżu:

  • Ustawienie bazy danych na inny stan, np single_user
  • Zapobieganie błędom, gdy skrypt ma USEpolecenie, ale baza danych użytkownika może być offline lub w inny sposób niedostępna
  • Udzielanie uprawnień na poziomie serwera, takich jak CREATE DATABASE
  • Przyznanie członkostwa w roli na poziomie serwera
  • Oznaczanie modułu jako obiektu systemowego ( sp_MS_marksystemobject) lub procedury uruchamiania
  • Niektóre rodzaje certyfikatów, audyt serwera i operacje grupy dostępności

Prawdopodobnie mnóstwo innych rzeczy. USE master;nie zawsze jest konieczne, ale czasami jest i nie zaszkodzi zawsze wykonywać polecenia na poziomie serwera z tej bazy danych.

Aaron Bertrand
źródło
17

Uważam, że nie jest wymagane używanie masterbazy danych do tworzenia bazy danych. Ponieważ polecenie tworzenia bazy danych powinno być uruchamiane w kontekście bazy danych, dokumentacja zawsze korzysta z domyślnej bazy danych, która jest masteri jest to systemowa baza danych, która będzie zawsze dostępna bez względu na wszystko, więc skrypt nie zawiedzie!

Biju Jose
źródło
4

Wierzę, że my, bardzo bardzo dawno temu, musieliśmy być mistrzami podczas wykonywania polecenia CREATE DATABASE. Jestem zbyt leniwy, aby odpalić jakieś 20-letnią wersję, by ją zweryfikować. Prawdopodobnie jest to połączenie tego i tego, że „wydaje się naturalne” być mistrzem. Na przykład, jeśli chcesz utworzyć folder (wyobraź sobie, że jest tylko jeden poziom folderów), prawdopodobnie poczujesz się lepiej, mówiąc najpierw CD \ (porównując katalog główny z główną bazą danych).

Tibor Karaszi
źródło