2015-01-08 82 views
0

我有一個場景。我有一個屬性表,有許多字段,包括屬性的大小。 所以如果某些屬性的大小爲5,那麼在屬性表中它將顯示5,但是如果用戶認爲它的大小不是5,但是它的大小是6,所以我想要處理該用戶將其大小保存爲6但不改變原始值是5.同樣,如果該用戶獲得該財產記錄,它將顯示該用戶的6個尺寸,但對於所有其他用戶,它將顯示5個尺寸。數據庫表結構和邏輯

任何人都可以幫助我如何處理表結構中的這種情況或顯示用戶特定的值。我的數據庫是SQL Server 2012

回答

1

你可以做這些方針的東西,如果用戶識別下來在數據庫級別:

你創建你平常表以及表包含用戶自定義:

create table dbo.T (
    ID varchar(19) not null primary key, 
    PropertySize int not null 
) 
go 
create table dbo.T_User (
    ID varchar(19) not null, 
    [User] sysname not null, 
    PropertySize int null 
) 

然後,您創建,通過它的所有交互現在應該會出現一個視圖,而不是表:

然後一對夫婦觸發s到確保一切得到適當的維護:

create trigger T_V_I on dbo.V instead of insert 
as 
    insert into dbo.T (ID,PropertySize) select ID,PropertySize from inserted 
go 
create trigger T_V_U on dbo.V instead of update 
as 
    merge into dbo.T_User u 
    using inserted s 
    on u.ID = s.ID 
    when matched then update set PropertySize= s.PropertySize 
    when not matched then insert (ID,[User],PropertySize) values (s.ID,SUSER_NAME(),s.PropertySize); 

所以基本上,每一個用戶自定義保存爲獨立的行和基表中包含的「默認」值,用戶將看到,除非他們已經應用了定製。

根據正在使用的認證選項,SUSER_NAME可能不是正確的功能,但其他各種USER函數之一將會是。

+0

這是唯一的方法,或者我們可以做一些其他方式而不是觸發器? –