2011-06-21 30 views
0

我們正在構建一個新的數據庫,這將使大量使用模式的分離我們的數據庫的邏輯部分複製表的確定指標。方法來控制幾種模式

而示例可能是員工和客戶端。我們將爲每個模式分配一個模式,而連接到另一個的Web服務將不被允許。

我們在哪裏打的問題/顧慮是數據出現在兩個模式非常相似。例如,員工和客戶都有地址。

我們可以做一些像common.Address。但保持服務數據訪問的權限是相當強大的。

所以它看起來像我們將與employee.Address和client.Address去。

但是,如果有強制執行的全局地址表定義的方式這將是很好。有些東西可以防止這兩個Address表的定義在開發過程中發生漂移。 (注:實際上是兩個以上。)

是否有類似的東西在SQL Server中。某種可以「實例化」成不同模式的表「類型」或「類」。 (我不希望在這裏,但我想我會問。)

+0

你解決這個問題? –

+0

@KM - 我們沒有找到我們都喜歡的解決方案。我們最終只是說,如果他們漂移,那就這樣吧。儘管如此,我們將試圖實施一個通用的DataContract。 – Vaccano

回答

2

的思考,而不是硬的答案...

我們有

  • 一個共同的數據架構
  • 意見,特效等,在每個客戶端架構
  • 內部「助手」模式的共享代碼

將這項工作嗎?

我的另一個想法是每個客戶端的數據庫。它更容易每個數據庫的權限,不是每個模式,特別是對直接數據庫訪問,支持或電力用戶類型

1

我覺得你最好的選擇是一個DDL觸發器,在那裏你可以改變你的任何「共同」的時候導致失敗表。

類似:

CREATE TRIGGER [Dont_Change_CommonTables] 
ON DATABASE 
FOR DDL_TABLE_EVENTS,GRANT_DATABASE 
AS 
DECLARE @EventData  xml 
DECLARE @Message  varchar(1000) 
SET @EventData=EVENTDATA() 

IF (@EventData.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(50)')='TABLE' 
    AND @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(50)') IN ('Address' 
                       ,'etc...' 
                       --place your table list here 
                      ) 
    ) 
BEGIN 
    ROLLBACK 
    SET @Message='Error! you can not make changes to '+ISNULL(LOWER(@EventData.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(50)')),'')+': '+ISNULL(@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(50)'),'') 
    RAISERROR(@Message,16,1) 
    RETURN 
END 
GO