Jestem głównie programistą aplikacji, ale muszę wykonać całą wstępną pracę z bazami danych dla mojego obecnego projektu (między innymi … MS SQL Server 2008 ). Jako pierwszą decyzję próbuję dowiedzieć się, czy podzielić swój stan za pomocą oddzielnych baz danych, czy też używając oddzielnych schematów w tej samej bazie danych. Przeczytałem trochę na temat schematów SQL Server i wydaje się to naturalnym sposobem oddzielania domen obiektów ( co lubię ), ale nie jestem pewien, czy mogą istnieć ukryte koszty tego wzorca.
Jakie są bardziej praktyczne rzeczy, które powinienem rozważyć przy wyborze między tymi dwoma podejściami? Jeśli dbo.mytable
uniknę tego, myschema.mytable
czy będę tworzyć inne wyzwania ( lub problemy ) dla mojej architektury?
Na marginesie ... W pewnym momencie zostanie to przekazane prawdziwemu DBA w celu utrzymania / wsparcia, więc staram się upewnić, że nie utrudniam ich życia.
źródło
Odpowiedzi:
Zacznę od stwierdzenia, że nie traktuj schematów jako przestrzeni nazw lub domen obiektów w sensie OO. Schematy to zasadniczo kontenery uprawnień z pewną wartością dodaną (patrz poniżej)
Ponadto „osobne schematy” lub „osobne bazy danych” to 2 różne pojęcia. Dane, które muszą być spójne transakcyjnie i referencyjnie, muszą znajdować się w tej samej bazie danych. Zobacz jedną bazę danych czy dziesięć? artykuł na blogu, aby uzyskać więcej.
W tej bazie danych możesz lub nie możesz używać schematów do organizowania swoich obiektów.
Osobiście jestem fanem schematów i zawsze ich używam, ale do takich rzeczy jak uprawnienia i logiczne grupowanie. W tym celu odsyłam do poprzednich pytań, w których można zobaczyć ogólną opinię na ich korzyść:
W przypadku oddzielnych baz danych zobacz odpowiedź Aarona , ale wszystko to zależy od wymogu „spójnego transakcyjnie i referencyjnego”.
źródło
Zgadzam się z @gbn. Zaprojektowałem rozwiązania wykorzystujące schematy do separacji i bazy danych do separacji i uważam, że korzystanie z baz danych jest znacznie bardziej praktyczne. Kilka powodów:
<schema>
przed wszystkimi odwołaniami do obiektów. Daje to wiele dynamicznego SQL, wiele różnych loginów aplikacji z domyślnymi schematami (co oznacza, że Twój kod nie używałby prefiksu schematu, opierając się na domyślnym schemacie użytkownika aplikacji - może to prowadzić do masowego buforowania planu i trudnego debugowania), lub wiele procedur przechowywanych do zarządzania (wyobraź sobie prosty raport, jeśli potrzebujesz jednego na schemat, wtedy kod się zmienia, teraz musisz zmienić ten sam kod wiele razy, raz dla każdego schematu).źródło