sql >> Databáze >  >> RDS >> Sqlserver

Použití databázových schémat v SQL Server

Tento článek vysvětlí, co jsou databázová schémata, jejich výhody a jak vytvářet a používat schémata na SQL Serveru.

V systému správy relačních databází, jako je SQL Server, databáze obsahuje různé objekty. Mohou to být tabulky, uložené procedury, pohledy a funkce. V databázi schéma odkazuje na logickou kolekci databázových objektů. K oddělení objektů můžete použít schémata v závislosti na aplikaci, přístupových právech a zabezpečení.

Schémata SQL Server

SQL Server poskytuje následující integrovaná logická schémata:

  • dbo
  • sys
  • host
  • INFORMAČNÍ_SCHÉMA

Každé schéma SQL Server musí mít uživatele databáze jako vlastníka schématu. Vlastník schématu má nad schématem plnou kontrolu. Můžete také změnit vlastníka schématu nebo přesunout objekty z jednoho schématu do druhého.

Schémata SQL Server poskytují následující výhody:

  • Poskytuje větší flexibilitu a kontrolu pro správu databázových objektů v logických skupinách
  • Umožňuje rychle přesouvat objekty mezi různými schématy
  • Umožňuje vám spravovat zabezpečení objektů na úrovni schématu
  • Umožňuje uživatelům spravovat logické skupiny objektů v rámci databáze
  • Umožňuje uživatelům převádět vlastnictví mezi různými schématy

Předpokládejme, že v databázi vaší organizace chcete seskupit objekty podle oddělení. Například tabulky a uložené procedury pro personální oddělení by měly být logicky seskupeny ve schématu [HR]. Podobně by tabulky finančního oddělení měly být ve schématu [Fin]. Každé schéma (logická skupina) obsahuje objekty SQL Server, jako jsou tabulky, uložené procedury, pohledy, funkce, indexy, typy a synonyma.

Poznámka:Schéma je entita s rozsahem databáze. Můžete mít stejné schéma v různých databázích instance SQL Server.

Ve výchozím nastavení používá SQL Server schéma [dbo] pro všechny objekty v databázi. Můžeme zadat dotaz SCHEMA_NAME(), abychom získali výchozí schéma pro připojeného uživatele.

SELECT SCHEMA_NAME() AS defaultschema;

Výpis všech databázových schémat v aktuální databázi

Seznam schémat můžete získat pomocí dotazu SSMS nebo T-SQL. Chcete-li to provést v SSMS, připojte se k instanci SQL, rozbalte databázi SQL a prohlédněte si schémata ve složce zabezpečení.

Případně můžete použít sys.schemas k získání seznamu databázových schémat a jejich příslušných vlastníků.

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;

Vytvoření schématu SQL Server pomocí CREATE SCHEMA

K vytvoření nového schématu SQL Serveru používáme příkaz CREATE SCHEMA t-SQL. Jeho syntaxe je uvedena níže.

CREATE SCHEMA <schema_name>
AUTHORIZATION <owner_name>
  • Schema_name:Toto je schéma, které chceme vytvořit
  • Autorizace:Toto je jméno vlastníka schématu

Skript pro vytváření schémat [HR], [Admin] a [Fin] s vlastníkem schématu [dbo] je uveden níže.

CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

Můžete obnovit databázi a zobrazit nově vytvořené schéma, jak je uvedeno níže.

Vytvoření nové tabulky v rámci schématu

Chcete-li vytvořit objekty, jako je tabulka, musíme zadat název schématu, ve kterém bude objekt vytvořen. Například následující skript vytvoří [TableA] v různých schématech [HR], [Admin] a [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)
)

Můžete spojit systémové tabulky sys.tables a sys.schema a uvést název tabulky s jejich schématy. Například níže uvedený dotaz vrátí [TableA] s jeho schématem.

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'

Pokud při vytváření objektu nezadáte schéma, SQL Server použije výchozí schéma. Například níže uvedený skript vytvoří tabulku A ve schématu dbo.

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

Poznámka:Můžete vytvořit tabulku s podobným názvem v jiném schématu databáze.

Chcete-li načíst data ze správného schématu, musíte zadat schéma tabulky. Například, jak je ukázáno výše, máme [TableA] ve všech schématech. Pokud tedy vyberete záznamy přímo bez zadání schématu, vyhledá objekt ve výchozím schématu DBO. Proto vždy zadejte název schématu, například SELECT * FROM HR.TableA pro načítání dat nebo provádění jakýchkoli operací.

Vytvoření uložené procedury v rámci schématu

Podobně můžete vytvářet objekty, jako jsou uložené procedury, v určených schématech. Například níže uvedený skript vytvoří SP ve schématu HR.

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

Přenos objektu do jiného schématu

V určitém okamžiku můžete získat požadavek na přesunutí objektu do konkrétního schématu. Předpokládejme například, že jste vytvořili nové schéma [Org] a chcete, aby se vaše [HR].[TableA] přesunulo ze schématu [HR] na schéma [Org].

V tomto případě můžete použít příkaz Alter SCHEMA s následující syntaxí.

ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

Níže uvedený skript přenese objekt [HR].[TableA] do schématu [Org].

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

Nyní přeneseme uloženou proceduru [HR].[GetEmpData] do schématu [Org].

ALTER SCHEMA ORG TRANSFER HR.GetEmpData

Jakmile skript spustíte, zobrazí uloženou proceduru ve schématu [Org].

Uvnitř uložené procedury však kód stále odkazuje na schéma [HR].[TableA].

Proto byste neměli přesouvat uložené procedury, funkce nebo pohledy pomocí funkce ALTER SCHEMA, protože ta může mít odkazy na objekty v definici. Místo toho můžete postup vypustit, vytvořit nebo změnit, jak je uvedeno níže.

Vypuštění schématu

Schéma můžete vypustit z databáze SQL Server, ale schéma by nemělo obsahovat žádné objekty. Pokud se například pokusím zrušit schéma [Org], zobrazí se chyba, že schéma nelze zrušit, protože na něj odkazuje objekt GetEmpData.

Proto můžete buď přenést objekt do jiného schématu, nebo nejprve objekty vypustit. Například zrušme uložené procedury GetEmpData a potom se pokusíme zrušit schéma. Opět došlo k chybě, protože ve schématu [Org] máme [TableA].

Jakmile zrušíme nebo přesuneme všechny objekty ve schématu databáze, můžete schéma zrušit.

Poznámka:Systémová schémata jako dbo, information_schema, sys.

nelze zrušit

Výhody použití databázových schémat

  • Databázová schémata nám poskytují flexibilitu při vytváření skupin logických objektů v databázi. Pokud více týmů pracuje se stejnou databází, můžeme navrhnout různá schémata k oddělení jejich objektů.
  • Databázová schémata pomáhají databázovým profesionálům spravovat přístup, protože můžete řídit přístup k uživatelům pro jejich příslušná schémata namísto poskytování přístupu k databázi jako celku.
  • Můžete efektivněji spravovat databáze, protože to umožňuje, aby se stejné objekty ve více schématech jevily jako různé logické skupiny.
  • Můžete rychle přesouvat objekty v rámci různých schémat.
  • Vlastnictví schématu lze přiřadit libovolnému principálovi databáze nebo rolím a lze také převést vlastnictví.
  • Poskytuje další vrstvu zabezpečení, protože k dotazování nebo manipulaci s daty potřebujete znát správné schéma objektu. Můžete také řídit přístup ke schématu a objektům vlastněným schématem.

  1. Jak vytvořit formulář pomocí Průvodce formulářem

  2. Jak používat alias v klauzuli Where?

  3. Záleží na pořadí tabulek, na které se odkazuje v klauzuli ON v JOIN?

  4. ORA-01461:lze svázat hodnotu LONG pouze pro vložení do sloupce LONG-Vyskytuje se při dotazování