Dlaczego nazwy tabel w SQL Server zaczynają się od „dbo”?

294

Przynajmniej w mojej lokalnej instancji, kiedy tworzę tabele, wszystkie mają przedrostek „dbo”. Dlaczego?

pupeno
źródło

Odpowiedzi:

233

dbo jest domyślnym schematem w SQL Server. Możesz tworzyć własne schematy, aby lepiej zarządzać przestrzenią nazw obiektów.

Daniel
źródło
22
Jako najlepszą praktykę zawsze dodam „dbo”. prefiks, nawet jeśli nie jest to konieczne. Przez większość czasu w SQL dobrze jest być jawnym.
SurroundedByFish
3
@SurroundedByFish: Prawdopodobnie nie jest to najlepsza praktyka, ale mogę się mylić, ponieważ nie jestem ekspertem od SQL. stackoverflow.com/a/769639/602245
Brett,
13
Ten artykuł z innej odpowiedzi stwierdzono, że w rzeczywistości jest to najlepsza praktyka: „Kod nie musiałby używać w pełni kwalifikowanej nazwy, chociaż osiąga to niewielki wzrost wydajności i jest uważany za najlepszą praktykę.”
Carl G
7
Również odpowiedź, którą podłączyłeś, zaleca również włączenie „dbo”. aby optymalizator nie musiał sprawdzać schematu.
Carl G
7
dbo nie jest dobrą praktyką. Utwórz własny schemat i zawsze go używaj. dbo istnieje tylko jako sztuczka migracyjna, więc wersja wcześniejsza niż SQL Server 2005 nadal działa. Tak, zawsze używaj schematu dla perf. Nie, nie migracja (np. Dbo).
David Betz
85

Jeśli korzystasz z Sql Server Management Studio, możesz utworzyć własny schemat, przechodząc do Bazy danych - Twoja baza danych - Bezpieczeństwo - Schematy.

Utworzenie go za pomocą skryptu jest tak proste jak (na przykład):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

Możesz ich użyć do logicznego grupowania swoich tabel, na przykład poprzez utworzenie schematu dla informacji „finansowych” i innego dla danych „osobistych”. Twoje tabele byłyby wówczas wyświetlane jako:

Financial.BankAccounts Financial.Transactions Personal.Address

Zamiast używać domyślnego schematu dbo.

Fenton
źródło
Czy wiesz, czy to powoduje jakiś problem, gdy używamy frameworku Entity?
batmaci
6
Możesz używać schematów w Entity Framework - nawet z kodem, jeśli chcesz:[Table("Customer", Schema = "MySchema")]
Fenton
Czy „AUTORYZACJA [dbo]” przyznaje takie same uprawnienia jak dbo w schemacie, czy też nadal muszę udzielać uprawnień użytkownikom?
Mark Micallef,