數(shù)據(jù)庫(kù)理論:淺談數(shù)據(jù)庫(kù)中的構(gòu)架

字號(hào):

一.什么是架構(gòu)?
    在一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)應(yīng)用的數(shù)據(jù)表,這些不同應(yīng)用的表可以放在不同的schema之中,同時(shí),每一個(gè)schema對(duì)應(yīng)一個(gè)用戶,不同的應(yīng)用可以以不同的用戶連接數(shù)據(jù)庫(kù),這樣,一個(gè)大數(shù)據(jù)庫(kù)就可以根據(jù)應(yīng)用把其表分開來(lái)管理。
    不同的schema之間它們沒有直接的關(guān)系,不同的shcema之間的表可以同名,也可以互相引用(但必須有權(quán)限),在沒有操作別的schema的操作根權(quán)下,每個(gè)用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數(shù)據(jù)(即schema用戶自己的數(shù)據(jù))
    實(shí)際上就是表名前面的名稱例如:dbo.T_Users, Admins.T_Powers 等
    參考:http://www.blogjava.net/gbk/archive/2008/09/22/158080.html
    二.用戶架構(gòu)分離的好處
    將架構(gòu)與數(shù)據(jù)庫(kù)用戶分離對(duì)管理員和開發(fā)人員而言有下列好處:
    1.多個(gè)用戶可以通過角色成員身份或 Windows 組成員身份擁有一個(gè)架構(gòu)。這擴(kuò)展了允許角色和組擁有對(duì)象的用戶熟悉的功能。
    2.極大地簡(jiǎn)化了刪除數(shù)據(jù)庫(kù)用戶的操作。
    3.刪除數(shù)據(jù)庫(kù)用戶不需要重命名該用戶架構(gòu)所包含的對(duì)象。因而,在刪除創(chuàng)建架構(gòu)所含對(duì)象的用戶后,不再需要修改和測(cè)試顯式引用這些對(duì)象的
    應(yīng)用程序。
    4.多個(gè)用戶可以共享一個(gè)默認(rèn)架構(gòu)以進(jìn)行統(tǒng)一名稱解析。
    5.開發(fā)人員通過共享默認(rèn)架構(gòu)可以將共享對(duì)象存儲(chǔ)在為特定應(yīng)用程序?qū)iT創(chuàng)建的架構(gòu)中,而不是 DBO 架構(gòu)中。
    6.可以用比早期版本中的粒度更大的粒度管理架構(gòu)和架構(gòu)包含的對(duì)象的權(quán)限。
    7.完全限定的對(duì)象名稱現(xiàn)在包含四部分:server.database.schema.object。
    三.默認(rèn)架構(gòu):
    SQL Server 2005 引入了“默認(rèn)架構(gòu)”的概念,用于解析未使用其完全限定名稱引用的對(duì)象的名稱。在 SQL Server 2000 中,首先檢查的是調(diào)用數(shù)據(jù)庫(kù)用戶所擁有的架構(gòu),然后是 DBO 擁有的架構(gòu)。在 SQL Server 2005 中,每個(gè)用戶都有一個(gè)默認(rèn)架構(gòu),用于指定服務(wù)器在解析對(duì)象的名稱時(shí)將要搜索的第一個(gè)架構(gòu)??梢允褂?CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 選項(xiàng)設(shè)置和更改默認(rèn)架構(gòu)。如果未定義 DEFAULT_SCHEMA,則數(shù)據(jù)庫(kù)用戶將把 DBO 作為其默認(rèn)架構(gòu)。
    四.對(duì)構(gòu)架名的操作:
    schema_name 當(dāng)前數(shù)據(jù)庫(kù)中的架構(gòu)名稱,會(huì)將對(duì)象移入其中。其數(shù)據(jù)類型不能為 SYS 或 INFORMATION_SCHEMA。
    object_name 要移入架構(gòu)中的架構(gòu)包含對(duì)象的一部分或兩部分名稱。
    table_name 當(dāng)前數(shù)據(jù)庫(kù)中的表名
    create schema schema_name -- 創(chuàng)建構(gòu)架名 (前數(shù)據(jù)庫(kù)中并不存在)
    drop schema schema_name  -- 刪除構(gòu)架名
    ALTER SCHEMA schema_name TRANSFER object_name -- 修改表名的構(gòu)架名
    select Ub.name as Schemas,Ua.name as ObjectName
    from sysobjects Ua inner join sys.schemas Ub on Ua.uid = Ub.schema_id
    where Ua.name= ’table_name’ -- 查看表所屬的構(gòu)架名
    注:
    以上Sql 語(yǔ)句在 Sql 2005中可以使用,但不知道對(duì)其他版本有沒有影響!