2010-09-02 82 views
1

我有一個使用C#和MySQL的項目。我需要存儲管理門戶設置的權限。目前有6個主要權限(讀取,寫入,查看,更新創建...),但每個權限都可以應用於n個實體。因此用戶可以創建,讀取到站點a,d,f但對其他100多個站點沒有權限。我認爲,使用與每個站點加在一起的位:所以燙髮表將具有 燙髮表 的userid INT(11) 燙髮INT(4)
SITEID INT() 和數據將是用戶ID = 10,燙髮= 5 SITEID = 6;用戶ID = 10,燙髮= 5,SITEID = 212 ...Mysql存儲網絡管理權限

開發商希望我們的XML存儲到數據庫中,以便它可能看起來像: 一個 東西上面liek。我需要幫助,大多數人做什麼?這對性能更好,我們有一個需要非常快的概念。許可結構會在最節省時檢查。 Thak提前幫助你。

回答

0

不要將位打包到一個字段中。這使得它不可測量,並且你不能在這些位上創建索引來加速搜索。另外,將XML粘貼到數據庫中是毫無意義的 - 只需將信息存儲在列中即可。我只需創建一個表,列出每個permision條目的網站ID,用戶ID和權限值。然後,您可以查詢該用戶和網站組合是否存在該值。如果索引正確,這將非常快速。

因此,一個行可能看起來像

id site_id user_id permission_id 
1 1  1  1 (read) 
2 1  1  2 (write) 

然後你查詢它像

select id from permissions where site_id = X and user_id = X and permission_id = X 

如果返回ID> 0,它的存在。

+0

您也可以根據個人權限創建一個列,並在其中存儲1或0。然後查詢該用戶/站點組合的值是否爲1。 – GrandmasterB 2010-09-02 19:33:00

0

坦率地說,你也可以做一個表wi用戶id,站點id,讀,寫,查看,更新,創建布爾值和索引所有列。我認爲它會比用一個整數的單個列更少混淆...

至於性能。如果有用戶會話只是將他們的憑證存儲到他們的會話中,而不是經常查詢數據庫。我不太熟悉C#及其技術,因爲我是個LAMP傢伙,但在查詢緩存選項和會話處理程序之間,我懷疑速度會成爲問題。