Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menggunakan skema database di SQL Server

Artikel ini akan menjelaskan apa itu skema database, kelebihannya, serta cara membuat dan menggunakan skema di SQL Server.

Dalam sistem manajemen database relasional seperti SQL Server, database berisi berbagai objek. Ini bisa berupa tabel, prosedur tersimpan, tampilan dan fungsi. Dalam database, skema mengacu pada kumpulan logis dari objek database. Anda dapat menggunakan skema untuk memisahkan objek bergantung pada aplikasi, hak akses, dan keamanan.

Skema SQL Server

SQL Server menyediakan skema logika bawaan berikut:

  • dbo
  • sistem
  • tamu
  • INFORMATION_SCHEMA

Setiap skema SQL Server harus memiliki pengguna database sebagai pemilik skema. Pemilik skema memiliki kendali penuh atas skema. Anda juga dapat mengubah pemilik skema atau memindahkan objek dari satu skema ke skema lainnya.

Skema SQL Server memberikan manfaat berikut:

  • Menyediakan lebih banyak fleksibilitas dan kontrol untuk mengelola objek database dalam grup logis
  • Memungkinkan Anda untuk memindahkan objek di antara skema yang berbeda dengan cepat
  • Memungkinkan Anda untuk mengelola keamanan objek pada tingkat skema
  • Memungkinkan pengguna untuk mengelola grup logis dari objek dalam database
  • Memungkinkan pengguna untuk mentransfer kepemilikan di antara berbagai skema

Misalkan untuk database organisasi Anda, Anda ingin mengelompokkan objek berdasarkan departemen. Misalnya, tabel dan prosedur tersimpan untuk departemen SDM harus dikelompokkan secara logis dalam skema [HR]. Demikian pula, tabel departemen keuangan harus dalam skema [Fin]. Setiap skema (grup logis) berisi objek SQL Server seperti tabel, prosedur tersimpan, tampilan, fungsi, indeks, jenis, dan sinonim.

Catatan:Skema adalah entitas cakupan database. Anda dapat memiliki skema yang sama di database yang berbeda dari instance SQL Server.

Secara default, SQL Server menggunakan skema [dbo] untuk semua objek dalam database. Kami dapat meminta SCHEMA_NAME() untuk mendapatkan skema default untuk pengguna yang terhubung.

SELECT SCHEMA_NAME() AS defaultschema;

Mencantumkan semua skema database di database saat ini

Anda bisa mendapatkan daftar skema menggunakan kueri SSMS atau T-SQL. Untuk melakukan ini di SSMS, Anda akan terhubung ke instance SQL, memperluas database SQL dan melihat skema di bawah folder keamanan.

Atau,  Anda dapat menggunakan sys.schemas untuk mendapatkan daftar skema database dan pemiliknya masing-masing.

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;

Membuat skema SQL Server menggunakan CREATE SCHEMA

Untuk membuat skema SQL Server baru, kami menggunakan pernyataan t-SQL CREATE SCHEMA. Sintaksnya ditunjukkan di bawah ini.

CREATE SCHEMA <schema_name>
AUTHORIZATION <owner_name>
  • Schema_name:Ini adalah skema yang ingin kita buat
  • Otorisasi:Ini adalah nama pemilik skema

Script untuk membuat skema [HR], [Admin] dan [Fin] dengan pemilik skema [dbo] ditampilkan di bawah ini.

CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

Anda dapat menyegarkan database dan melihat skema yang baru dibuat seperti yang ditunjukkan di bawah ini.

Membuat tabel baru dalam skema

Untuk membuat objek seperti tabel, kita perlu menentukan nama skema objek yang akan dibuat. Misalnya, skrip berikut membuat [TableA] dalam skema yang berbeda [HR], [Admin] dan [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)
)

Anda dapat bergabung dengan tabel sistem sys.tables dan sys.schema untuk membuat daftar nama tabel dengan skemanya. Misalnya, kueri di bawah ini mengembalikan [TableA] dengan skemanya.

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'

Jika Anda tidak menentukan skema saat membuat objek, SQL Server menggunakan skema default. Misalnya, skrip di bawah ini membuat TabelA dalam skema dbo.

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

Catatan:Anda dapat membuat tabel dengan nama yang mirip dalam skema database yang berbeda.

Anda diminta untuk menentukan skema tabel untuk mengambil data dari skema yang benar. Misalnya, seperti yang ditunjukkan di atas, kami memiliki [TableA] di semua skema. Oleh karena itu, jika Anda memilih rekaman secara langsung tanpa menentukan skema, itu akan mencari objek dalam skema DBO default. Oleh karena itu, selalu tentukan nama skema seperti SELECT * FROM HR.TableA untuk pengambilan data atau melakukan operasi apa pun.

Membuat prosedur tersimpan dalam skema

Demikian pula, Anda dapat membuat objek seperti prosedur tersimpan dalam skema tertentu. Misalnya, skrip di bawah ini membuat SP dalam skema HR.

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

Mentransfer objek ke skema yang berbeda

Pada titik tertentu, Anda mungkin mendapatkan persyaratan untuk memindahkan objek ke skema tertentu. Misalnya, Anda membuat skema baru [Org], dan Anda ingin [HR].[TableA] Anda berpindah dari skema [HR] ke skema [Org].

Dalam hal ini, Anda dapat menggunakan perintah Alter SCHEMA dengan sintaks berikut.

ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

Skrip di bawah ini mentransfer objek [HR].[TableA] ke skema [Org].

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

Sekarang, mari transfer prosedur tersimpan [HR].[GetEmpData] ke skema [Org].

ALTER SCHEMA ORG TRANSFER HR.GetEmpData

Setelah Anda menjalankan skrip, skrip akan menampilkan prosedur tersimpan dalam skema [Org].

Namun, di dalam prosedur tersimpan, kode tersebut masih mengacu pada skema [HR].[TableA].

Oleh karena itu, Anda tidak boleh memindahkan prosedur, fungsi, atau tampilan tersimpan menggunakan fungsi ALTER SCHEMA karena mungkin memiliki referensi untuk objek dalam definisi. Sebagai gantinya, Anda dapat menghapus, membuat, atau mengubah prosedur seperti yang ditunjukkan di bawah ini.

Menghapus skema

Anda dapat menjatuhkan skema dalam database SQL Server, tetapi skema tidak boleh menampung objek apa pun. Misalnya, jika saya mencoba untuk menghapus skema [Org], ini akan memberikan kesalahan bahwa Anda tidak dapat menghapus skema karena objek GetEmpData mereferensikannya.

Oleh karena itu, Anda dapat mentransfer objek ke skema yang berbeda atau menjatuhkan objek terlebih dahulu. Misalnya, mari kita hapus prosedur tersimpan GetEmpData lalu coba hapus skemanya. Kami kembali mendapatkan kesalahan karena kami memiliki [TableA] dalam skema [Org].

Setelah kami menjatuhkan atau memindahkan semua objek dalam skema database, Anda dapat menghapus skema tersebut.

Catatan:Anda tidak dapat menghapus skema sistem seperti dbo, information_schema, sys.

Keuntungan menggunakan skema database

  • Skema database memberi kita fleksibilitas untuk membuat grup objek logis dalam database. Jika beberapa tim bekerja dengan database yang sama, kami dapat merancang berbagai skema untuk memisahkan objek mereka.
  • Skema database membantu profesional database mengelola akses, karena Anda dapat mengontrol akses ke pengguna untuk skema masing-masing alih-alih memberikan akses ke database secara keseluruhan.
  • Anda dapat mengelola database dengan lebih efisien karena memungkinkan objek yang sama dalam beberapa skema muncul sebagai grup logis yang berbeda.
  • Anda dapat dengan cepat memindahkan objek dalam skema yang berbeda.
  • Kepemilikan skema dapat ditetapkan dengan prinsip atau peran basis data apa pun dan kepemilikan juga dapat ditransfer.
  • Ini memberikan lapisan keamanan tambahan karena Anda perlu mengetahui skema objek yang benar untuk menanyakan atau memanipulasi data. Anda juga dapat mengontrol akses pada skema dan objek yang dimiliki skema.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Stuff dan 'For Xml Path' bekerja di SQL Server?

  2. Kiat untuk Mengurangi Kompleksitas SQL Server Anda

  3. Cara Menghindari Monitor Aktivitas Menyakiti Kinerja SQL Server Anda

  4. Ekspor data kueri SQL ke Excel

  5. Gunakan FILEGROUP_NAME() untuk Mengembalikan Nama Filegroup di SQL Server