Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на схеми на база данни в SQL Server

Тази статия ще обясни какво представляват схемите на бази данни, техните предимства и как да създавате и използвате схеми в SQL Server.

В система за управление на релационна база данни като SQL Server, базата данни съдържа различни обекти. Това могат да бъдат таблици, съхранени процедури, изгледи и функции. В база данни схемата се отнася до логическата колекция от обекти на база данни. Можете да използвате схеми за разделяне на обекти в зависимост от приложението, правата за достъп и сигурността.

Схеми на SQL сървър

SQL Server предоставя следните вградени логически схеми:

  • dbo
  • sys
  • гост
  • INFORMATION_SCHEMA

Всяка схема на SQL Server трябва да има потребител на база данни като собственик на схема. Собственикът на схемата има пълен контрол върху схемата. Можете също да промените собственика на схемата или да преместите обекти от една схема в друга.

Схемите на SQL Server предоставят следните предимства:

  • Осигурява по-голяма гъвкавост и контрол за управление на обекти на база данни в логически групи
  • Позволява ви бързо да премествате обекти между различни схеми
  • Позволява ви да управлявате сигурността на обекта на ниво схема
  • Позволява на потребителите да управляват логически групи от обекти в база данни
  • Позволява на потребителите да прехвърлят собствеността между различни схеми

Да предположим, че за базата данни на вашата организация искате да групирате обекти въз основа на отдели. Например, таблиците и съхранените процедури за отдела за човешки ресурси трябва да бъдат логически групирани в схемата [HR]. По същия начин таблиците на финансовия отдел трябва да бъдат в схемата [Fin]. Всяка схема (логическа група) съдържа обекти на SQL Server като таблици, съхранени процедури, изгледи, функции, индекси, типове и синоними.

Забележка:Схемата е обект с обхват на база данни. Можете да имате една и съща схема в различни бази данни на екземпляр на SQL Server.

По подразбиране SQL Server използва [dbo] схема за всички обекти в база данни. Можем да отправим заявка към SCHEMA_NAME(), за да получим схемата по подразбиране за свързания потребител.

SELECT SCHEMA_NAME() AS defaultschema;

Изписване на всички схеми на база данни в текущата база данни

Можете да получите списък със схемите, като използвате SSMS или T-SQL заявка. За да направите това в SSMS, трябва да се свържете с SQL екземпляр, да разширите SQL базата данни и да прегледате схемите в папката за защита.

Като алтернатива можете да използвате sys.schemas, за да получите списък със схеми на база данни и съответните им собственици.

SELECT s.name AS schema_name,
u.name AS schema_owner
FROM sys.schemas s
INNER JOIN sys.sysusers u ON u.uid = s.principal_id
ORDER BY s.name;

Създаване на схема на SQL Server чрез CREATE SCHEMA

За да създадем нова схема на SQL Server, ние използваме оператора CREATE SCHEMA t-SQL. Синтаксисът му е показан по-долу.

CREATE SCHEMA <schema_name>
AUTHORIZATION <owner_name>
  • Schema_name:Това е схемата, която искаме да създадем
  • Упълномощаване:Това е името на собственика на схемата

Скриптът за създаване на схеми [HR], [Admin] и [Fin] със собственик на схемата [dbo] е показан по-долу.

CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

Можете да обновите базата данни и да видите новосъздадената схема, както е показано по-долу.

Създаване на нова таблица в рамките на схема

За да създадем обекти като таблица, трябва да посочим името на схемата, в която ще бъде създаден обектът. Например следният скрипт създава [TableA] в различни схеми [HR], [Admin] и [Fin].

CREATE TABLE HR.TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
CREATE TABLE [Admin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)
CREATE TABLE [Fin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

Можете да се присъедините към системни таблици sys.tables и sys.schema, за да изброите името на таблицата с техните схеми. Например заявката по-долу връща [TableA] с нейната схема.

SELECT
s.name AS SchemaName,
t.name AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE t.name ='TableA'

Ако не посочите схема, докато създавате обекта, SQL Server използва схемата по подразбиране. Например, скриптът по-долу създава TableA в dbo схемата.

CREATE TABLE TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

Забележка:Можете да създадете таблица с подобно име в различната схема на база данни.

От вас се изисква да посочите схемата на таблицата, за да извлечете данни от правилната схема. Например, както е показано по-горе, имаме [Таблица A] във всички схеми. Следователно, ако изберете записи директно, без да посочвате схемата, той търси обект в DBO схемата по подразбиране. Затова винаги посочвайте името на схемата като SELECT * FROM HR.TableA за извличане на данни или извършване на каквито и да е операции.

Създаване на съхранена процедура в рамките на схема

По подобен начин можете да създавате обекти като съхранени процедури в определени схеми. Например скриптът по-долу създава SP в HR схемата.

CREATE PROCEDURE HR.GetEmpData
AS
BEGIN
SELECT * FROM [HR].[TableA]
END

Прехвърляне на обекта към друга схема

В даден момент може да получите изискване да преместите обекта в конкретна схема. Да предположим например, че сте създали нова схема [Org] и искате вашата [HR].[TableA] да премине от схема [HR] към схема [Org].

В този случай можете да използвате командата Alter SCHEMA със следния синтаксис.

ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

Скриптът по-долу прехвърля обект [HR].[TableA] към схемата [Org].

CREATE SCHEMA [ORG]
GO
ALTER SCHEMA ORG TRANSFER HR.TableA

Сега нека прехвърлим съхранената процедура [HR].[GetEmpData] към схемата [Org].

ALTER SCHEMA ORG TRANSFER HR.GetEmpData

След като изпълните скрипта, той показва съхранената процедура в схемата [Org].

Въпреки това, вътре в съхранената процедура, кодът все още се отнася до схемата [HR].[TableA].

Следователно, не трябва да местите съхранени процедури, функции или изгледи, като използвате функцията ALTER SCHEMA, тъй като тя може да има препратки към обектите в дефиницията. Вместо това можете да пуснете, създадете или промените процедурата, както е показано по-долу.

Изтриване на схема

Можете да пуснете схема в база данни на SQL Server, но схемата не трябва да съдържа никакви обекти. Например, ако се опитам да махна схемата [Org], тя дава грешка, че не можете да махнете схемата, защото обектът GetEmpData я препраща.

Следователно можете или да прехвърлите обекта в друга схема, или първо да пуснете обектите. Например, нека пуснем GetEmpData съхранените процедури и след това се опитаме да премахнем схемата. Отново получихме грешка, защото имаме [TableA] в схемата [Org].

След като пуснем или преместим всички обекти в схемата на базата данни, можете да пуснете схемата.

Забележка:Не можете да махнете системни схеми като dbo, information_schema, sys.

Предимства от използването на схеми на база данни

  • Схемите на базата данни ни предоставят гъвкавостта да създаваме логически групи обекти в база данни. Ако няколко екипа работят с една и съща база данни, можем да проектираме различни схеми за разделяне на техните обекти.
  • Схемите на базата данни помагат на професионалистите от бази данни да управляват достъпа, тъй като можете да контролирате достъпа до потребителите за техните съответни схеми, вместо да предоставяте достъп до базата данни като цяло.
  • Можете да управлявате по-ефективно бази данни, защото позволява на едни и същи обекти в множество схеми да се показват като различна логическа група.
  • Можете бързо да местите обекти в различни схеми.
  • Собствеността на схемата може да бъде присвоена на всеки принципал или роли на базата данни, а собствеността също може да бъде прехвърлена.
  • Осигурява допълнителен слой на сигурност, тъй като трябва да знаете правилната схема на обекта, за да заявите или манипулирате данни. Можете също да контролирате достъпа до схеми и обекти, притежавани от схема.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Регулярни изрази в SQL Server

  2. Как SESSION_CONTEXT() работи в SQL Server

  3. Кога трябва да използваме NVARCHAR/NCHAR вместо VARCHAR/CHAR в SQL Server?

  4. Как да разрешите невъзможността да се превключи грешката в кодирането при вмъкване на XML в SQL Server

  5. Как да започнете със SQL Server на Azure