Zadawszy to pytanie na Stackoverflow , zastanawiałem się, gdzie to, co zrobiłem, jest poprawne / najlepsza praktyka.
Zasadniczo każdy obiekt, który tworzę, przechodzi w schemat z nazwą schematu odzwierciedlającą użycie. Na przykład mam schematy Audit
i Admin
(między innymi).
To z kolei nie pozostawia żadnych przedmiotów dbo
. Czy to jest ok? Czy jest coś jeszcze, co muszę zrobić?
sql-server
best-practices
Stuart Blackler
źródło
źródło
Odpowiedzi:
Schematy są nie tylko doskonałym narzędziem bezpieczeństwa (co jest wystarczającym powodem do ich użycia), ale są również idealne do logicznej separacji. I wygląda na to, że to właśnie ćwiczysz.
Nawet jeśli obecne wymaganie nie wymaga specjalnych zabezpieczeń, powiedzmy, że wszystkie obiekty bazy danych związane z inspekcją powinny być zabezpieczone do roli bazy danych. Jeśli te obiekty zostały rozproszone w całym
dbo
schemacie, musisz jawniedeny
zezwolić na poszczególne obiekty. Ale zeAudit
schematem robisz singieldeny
i jesteś gotowy.Osobiście ćwiczę stosowanie schematów. Tak jak wszystkie rzeczy w bazach danych, istnieje też szczęśliwy środek przekazu. Nie stworzyłbym schematu dla każdego szczegółowego aspektu warstwy danych. Istnieje coś takiego jak zbyt wiele schematów i separacji. Ale zgaduję, że nie jesteś blisko tego.
źródło
Typowy wzór jest schematy oparte na uprawnieniach, więc trzeba było
WebGUI
,Desktop
etc dla kodu więc wszystkie obiekty mają te same sekcji publicznej ze schematu .Jeśli masz jasne grupy użytkowników, możesz na to zezwolić, ale w pewnym momencie skończysz z nakładającymi się i niechlujnymi uprawnieniami. Mam tendencję do odraczania kontroli użytkowników / grup do niektórych kontroli wewnątrz kodu, a nie obiektów uprawnień: powiedzmy, że masz użytkowników Admin i HR Excel: wszystkie uruchamiają
Desktop
kod.Dane te są zwykle dzielone tak, że mam
Data
schematu, możeHistory
lubArchive
schematu.Niektóre kody nie są publiczne (jak UDF lub wewnętrzny proc), więc użyłbym
Helper
schematu dla kodu, który nie powinien być uruchamiany przez kod klienta.Wreszcie, jak schematy
Staging
lubSystem
czyMaintenance
są przydatnymi czasami.Chociaż w
dbo
schemacie nie ma żadnych obiektów użytkownika , użytkownikdbo
jest właścicielem wszystkich schematów.źródło
Żadne obiekty w
dbo
schemacie nie są idealnie w porządku. Z tego, co widzę, nie jest to również nadużywanie schematów - chociaż ile schematów to „zbyt wiele” jest dość subiektywnym pytaniem (jest porównywalne do „Ile klas powinien mieć mój projekt OO?”).Jedyną rzeczą, o której wspomnę, byłoby przyznanie uprawnień do schematu, a nie pojedynczych obiektów (twoje pytanie SO nie określa niczego na temat uprawnień).
źródło
Chciałbym użyć schematów do oddzielenia bazy danych według modułów i wzorców użytkowania. Uważam, że bardzo łatwo jest zrozumieć tabele bazy danych, dlatego konserwacja staje się łatwiejsza. Miałem następujące typy schematów w moim ostatnim projekcie serwera SQL. LT - Tabele przeglądowe
W przypadku dużych modułów rozdzieliliśmy je również na więcej schematów. Na przykład moduł personelu składa się z ponad 5 modułów.
Uwzględniliśmy również schematy dotyczące innych działań TEMP, KONSERWACJA. W studiu zarządzania można filtrować według nazwy schematu. Deweloper odpowiedzialny za MODULE1, filtruje według nazwy i działa prawie cały czas tylko z tymi tabelami. Dzięki temu programiści, dbas i nowi użytkownicy bardzo łatwo mogą zrozumieć tabele bazy danych.
źródło
Najlepsze praktyki mogą być inne dla serwera SQL niż dla Oracle, jednak z mojego doświadczenia wynika, że im mniej schematów, tym lepiej.
Lubię mieć schemat dla dba / programisty, który ma specjalne uprawnienia i trochę kodu do obsługi. Wszystkie dane biznesowe powinny iść w jednym schemacie, abyś wiedział, gdzie to jest. Konwencje nazewnictwa są wystarczające, aby rozróżnić użycie tabeli lub przechowywanego kodu.
Widzę przypadek, w którym masz wiele jednostek biznesowych, które mają różne dane, przy niewielkim nakładaniu się, każdy z nich ma własny schemat. W przeciwnym razie zachowaj prostotę.
źródło