Чим хороші схеми SQL Server?


185

Я не починаю використовувати бази даних SQL, і зокрема SQL Server. Однак я, головним чином, хлопець SQL 2000, і мене завжди бентежили схеми в 2005+. Так, я знаю основне визначення схеми, але для чого вони реально використовуються для типового розгортання SQL Server?

Я завжди просто використовував схему за замовчуванням. Чому я хочу створити спеціалізовані схеми? Чому я б призначив будь-яку з вбудованих схем?

EDIT: Для уточнення, я думаю, я шукаю переваги схем. Якщо ви збираєтесь використовувати його лише як схему безпеки, здається, що ролі баз даних вже заповнені, що .. е .. гм .. роль. І використовувати його як специфікатор простору імен, здається, було щось, що ви могли зробити з власністю (dbo порівняно з користувачем тощо).

Я здогадуюсь, що я отримую, це те, що роблять схеми, які ти не міг зробити з власниками та ролями? Які їхні конкретні переваги?

Відповіді:


164

Схеми логічно групують таблиці, процедури, погляди разом. Усі об'єкти, пов'язані з працівниками, у employeeсхемі тощо.

Ви також можете надати дозволи лише одній схемі, щоб користувачі могли бачити лише схему, до якої вони мають доступ, і більше нічого.


21
Можливість призначити дозволи схемі робить її вартим з точки зору адміністрації.
Хакан Вінтер

9
Не могли б ви використовувати окрему базу даних?
сам Йі

7
Ця схема дозволу добре звучить на папері ... але рідко коли-небудь використовується належним чином. Мені це не варте клопоту.
сам Йі

3
Але якщо це так, чи не могли б ви досягти того ж, використовуючи конвенції про іменування? Я не пропоную там НЕ використовувати випадок використання; це, частіше за все, додавання відніманням.
сам урожай

6
@ Ajedi32, так ... за допомогою схем ви можете отримати єдиний атомний фіксатор в одному журналі транзакцій і повернути всі свої дані за один кадр, порівняно з двома базами даних, які не синхронізовані, а також борються з розподіленими транзакціями.
Матвій Віт

31

Подібно до простору імен C # кодів.


16
На жаль , схеми та простори імен .NET не дуже добре грають з точки зору ORM ( а саме Entity Framework ). Таблиці MyDatabase.MySchemaсхеми не магічно відображають класи сутностей у MyProject.MyDatabase.MySchemaпросторі імен. Варто також зазначити, що будь-які .хаки точки-нотацій ( ) у назвах таблиць закінчуватимуться як підкреслення ( _) у назвах класів. Просто їжа для нещасної думки.
Ден Лугг

2
Гарна аналогія для викладання. Я не бачу, щоб це було сприйнято на 100% буквально ... (ці застереження на практиці звучать незначно)
Samantha Branham

6
Особисто я б хотів, щоб вони були більше схожими на простори імен .NET, таким чином, щоб можна було вкладати довільну кількість схем ( як можна з просторами імен ) для організаційних цілей. Це, і я б хотів, щоб вони відобразилися краще в EF.
Ден Лугг

Вони не схожі на простори імен будь-якою мовою, яку я можу придумати.
Tanveer Badar

29

Вони також можуть забезпечити своєрідний захист від зіткнення даних плагінів. Наприклад, нова функція зміни даних захоплення даних у SQL Server 2008 таблиці використовує таблиці в окрему схему cdc. Таким чином, їм не потрібно турбуватися про конфлікт імен між таблицею CDC та реальною таблицею, що використовується в базі даних, і з цього приводу можуть навмисно затінювати імена реальних таблиць.


17

Я знаю, що це стара нитка, але я просто переглянув схеми і думаю, що наступне може стати ще одним хорошим кандидатом для використання схеми:

У сховищі даних із даними, що надходять із різних джерел, ви можете використовувати різні схеми для кожного джерела, а потім, наприклад, керувати доступом на основі схем. Також уникає можливих зіткнень з іменами між різними джерелами, як відповів інший плакат вище.


9

Якщо ви зберігаєте свою схему дискретно, ви можете масштабувати додаток, розгорнувши задану схему на новому сервері БД. (Це передбачає, що у вас є додаток або система, яка достатньо велика, щоб мати чітку функціональність).

Прикладом розглянемо систему, яка здійснює ведення журналів. Усі таблиці реєстрації та SP входять у схему [logging]. Ведення журналу - хороший приклад, оскільки рідко (якщо взагалі є) інша функціональність в системі перекриває (тобто приєднується до) об'єкти в схемі реєстрації.

Підказка щодо використання цієї методики - мати різний рядок з'єднання для кожної схеми у вашій програмі / системі. Потім ви розгортаєте елементи схеми на новому сервері та змінюєте рядок підключення, коли потрібно масштабувати.


8

Я схильний погодитися з Брентом щодо цього ... дивіться цю дискусію тут. http://www.brentozar.com/archive/2010/05/why-use-schemas/

Якщо коротко ... схеми не дуже корисні, за винятком дуже конкретних випадків використання. Робить речі безладними. Не використовуйте їх, якщо можете допомогти. І спробуйте дотримуватися правила K (eep) I (t) S (Imple) S (tupid).


2
Я не думаю, що Brent стверджує, що "схеми погані", лише те, що використання не за замовчуванням схем набагато складніше, ніж просто використання схеми за замовчуванням. Решта вашого підсумків точна.
Джозеф Дайгл

"Якщо [схеми] використовуються правильно, вони дозволяють вам розділити дозволи за групами об'єктів." ~ brentozar.com/archive/2010/05/why-use-schemas
LL Learner

7

Я не бачу вигоди у видаленні користувачів, прив'язаних до схем. Ось чому….

Більшість людей спочатку підключають свої облікові записи користувачів до баз даних за допомогою ролей. Як тільки ви призначите користувача будь-якому sysadmin або ролі бази даних db_owner у будь-якій формі, цей обліковий запис або псевдонім до "dbo" облікового запису користувача, або має повний дозволи на базу даних. Як тільки це відбудеться, незалежно від того, як ви присвоюєте собі схему, що виходить за схемою за замовчуванням (яка має те саме ім’я, що і ваш обліковий запис користувача), ці права dbo присвоюються тим об’єктам, які ви створюєте під користувачем та схемою. Це свого роду безглуздо ..... а просто простір імен і плутає справжнє право власності на ці об'єкти. Його поганий дизайн, якщо ви запитаєте мене .... хто б це не спроектував.

Що вони повинні були зробити, це створити "Групи", викинути схеми та роль і просто дозволити вам впорядкувати групи груп у будь-якій комбінації, яка вам подобається, а потім на кожному ярусі повідомте системі, чи дозволи дозволені успадковуються, відмовляються чи перезаписуються на замовлення ті. Це було б набагато інтуїтивніше, що дозволило б DBA краще контролювати, хто на цих об'єктах справжні власники. Зараз його мається на увазі в більшості випадків користувач SQL Server за замовчуванням має ці права .... а не користувач.


7

У магазині ORACLE, в якому я працював багато років, схеми використовувались для інкапсуляції процедур (і пакетів), які застосовувались до різних застосувань. Різна схема "API" для кожної програми часто мала сенс, оскільки випадки використання, користувачі та системні вимоги були зовсім різними. Наприклад, одна схема "API" була для програми для розробки / конфігурації, яка повинна використовуватися лише розробниками. Ще однією схемою "API" був доступ до клієнтських даних за допомогою переглядів та процедур (пошуку). Ще один інкапсульований код схеми "API", який використовувався для синхронізації розробки / конфігурації та даних клієнта з додатком, який мав власну базу даних. Деякі з цих схем "API" під обкладинками все ще поділять загальні процедури та функції з іншими (через інші "COMMON"

Я скажу, що відсутність схеми - це, мабуть, не кінець світу, хоча це може бути дуже корисним. Дійсно, саме відсутність пакетів у SQL Server справді створює проблеми в моїй свідомості ... але це вже інша тема.


У Oracle, оскільки 1 екземпляр = 1 база даних = 1 ліцензія на оплату, люди використовують схеми, щоб уникнути створення іншого db та оплати за іншу ліцензію. На сервері SQl 1 сервер може обробляти велику кількість баз даних.
Патрік Онорез

5

Я думаю, схеми - це як багато нових функцій (будь то SQL Server чи будь-який інший програмний інструмент). Вам потрібно уважно оцінити, чи користь від додавання його до комплекту розвитку компенсує втрату простоти в розробці та реалізації.

Мені здається, що схеми приблизно еквівалентні необов'язковим просторам імен. Якщо ви опинилися в ситуації, коли назви об'єктів стикаються і деталізація дозволів недостатньо точна, ось вам інструмент. (Я схиляюсь сказати, що можуть виникнути проблеми дизайну, які слід вирішити спочатку на більш фундаментальному рівні.)

Проблема може полягати в тому, що якщо він є, деякі розробники почнуть випадково використовувати його для короткострокової вигоди; і як тільки він буде там, він може стати кудзу.


3

У SQL Server 2000 об’єкти, створені, були пов’язані з цим конкретним користувачем, як, наприклад, якщо користувач, скажімо, Сам створює об'єкт, скажімо, Співробітники, ця таблиця виглядатиме так: Sam.E Employees. А як бути, якщо Сем залишає компанію або переїжджає в іншу ділову сферу. Як тільки ви видалите користувача Sam, що буде з таблицею Sam.E Employees? Ймовірно, вам доведеться спочатку змінити право власності з Sam.E Employees на dbo.Eслуess. Схема забезпечує рішення для подолання цієї проблеми. Сем може створити всі свої об'єкти в межах схеми, такої як Emp_Schema. Тепер, якщо він створює об'єкт Співробітники в межах Emp_Schema, то об'єкт буде іменуватися як Emp_Schema.E Employees. Навіть якщо обліковий запис користувача Sam потрібно видалити, на схему це не вплине.


1
Це більше не відповідає дійсності, оскільки з 2000 року вийшли дві нові версії
Хоган

0

розвиток - кожен з наших розробників отримує власну схему, як пісочницю, в яку можна грати.


29
-1 Краще давати розробникам окремі цілі копії бази даних, з якими можна грати на власній машині. В іншому випадку вони могли лише безпечно змінити те, що є в їхній схемі. Це ускладнює просування до життя, а також ускладнює розділення схеми з інших причин, описаних іншими відповідями.
Стівен Тернер

5
Я не можу говорити за додаток, над яким ви працюєте ... але ваш розвиток повинен максимально відображати виробництво. Мати схеми в програмі dev, а не в prod може бути проблематичним.
сам урожай

0

Ось хороший приклад реалізації схеми використання SQL Server. У нас було кілька програм для доступу до MS. Ми хотіли перетворити їх на портал додатків ASP.NET. Кожна програма доступу до MS пишеться як додаток для цього порталу. Кожна програма доступу до MS має власні таблиці баз даних. Деякі з них пов'язані, ми розміщуємо їх у загальній схемі dbo для SQL Server. Решта отримує власні схеми. Таким чином, якщо ми хочемо знати, які таблиці належать додатку на порталі додатків ASP.NET, за яким можна легко переміщуватися, візуалізувати та підтримувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.