Уточнение схемы базы данных - PullRequest
2 голосов
/ 23 января 2012

К сожалению, термин «схема» стал принимать разные определения для разных баз данных. Мы используем SQL Server 2008 R2, и с учетом этого у меня есть лучшее понимание благодаря некоторым другим вопросам здесь, где люди задают аналогичные вопросы. Однако, прежде чем я начну создавать базу данных, я хочу убедиться, что у меня есть это право для моего конкретного сценария.

В основном это база данных для различных отделов компании. Например, Администрация будет управлять сотрудниками с помощью нескольких таблиц, связанных с управлением сотрудниками. Маркетинг будет иметь много связанных с маркетингом таблиц. И у технической поддержки будет много таблиц, связанных с технической поддержкой. Эти "группы", вероятно, никогда не будут взаимодействовать друг с другом, но все они являются частью одного и того же проекта, поэтому я помещаю их все в одну базу данных, а не в три отдельные базы данных.

Правильно ли я понимаю, что это означает, что мне нужны три разные схемы? Например, для Администрации таблицы будут иметь имя:

Administration.Employees
Administration.VacationDays
Administration.EmployeeAddresses
etc.

и затем для технической поддержки, например:

Techsupport.Clients
Techsupport.OpenIssues
Techsupport.ClosedIssues
etc.

И тогда я правильно понял, что ЦЕЛЬ этого, вместо того, чтобы просто иметь каждую таблицу в схеме dbo, предназначена для A) целей организации и B) разрешений (пользователи с доступом к схеме Techsupport не должны иметь возможности например, для доступа к схеме администрирования). В моей голове возникла идея, что схемы в определении SQL Server состоят в том, что схема похожа на виртуальную папку, которая объединяет связанные таблицы.

Я думаю, что это правильно после всех подобных вопросов, которые я прочитал, но я просто очень хочу быть уверенным, что я на правильном пути, прежде чем я зайду слишком далеко и пойму, что делаю это совершенно неправильно .

Выбрасывать все в схему dbo и вызывать день не рекомендуется? Следует ли использовать схему даже для небольших баз данных, которым необязательно требуется несколько схем?

Спасибо.

1 Ответ

4 голосов
/ 23 января 2012

Схемы поддерживают две основные цели:

  • защитный контейнер. Разрешения могут быть предоставлены для схем, и такие разрешения применяются ко всем объектам в схеме. Например. GRANT SELECT ON SCHEMA::Administration TO [foo\bar]; предоставляет разрешение SELECT для любой таблицы в схеме, включая будущие добавленные таблицы.

  • пространства имен. Вы можете развернуть свое приложение в схеме [CptSupermarkt] и знать, что у вашего приложения очень низкая вероятность конфликта имен с другими приложениями.

Преобладающее использование - первое, потому что большинство приложений не связаны с параллельным развертыванием с другими приложениями и обычно принимают на себя владение всей базой данных (если не целым экземпляром). Однако существуют типы приложений (например, инструменты аудита и приложения мониторинга), которые используют аспект схем имен пространства имен (или, по крайней мере, большинство должны использовать его ...).

...