資源描述:
《淺談數(shù)據(jù)庫設(shè)計(jì)技巧下》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、三、多用戶及其權(quán)限管理的設(shè)計(jì)開發(fā)數(shù)據(jù)庫管理類的軟件,不可能不考慮多用戶和用戶權(quán)限設(shè)置的問題。盡管目前市面上的大.中型的后臺(tái)數(shù)據(jù)庫系統(tǒng)軟件都提供了多用戶,以及細(xì)至某個(gè)數(shù)據(jù)庫內(nèi)某張表的權(quán)限設(shè)置的功能,我個(gè)人建議:一套成熟的數(shù)據(jù)庫管理軟件,還是應(yīng)該自行設(shè)計(jì)用戶管理這塊功能,原因有二:1?那些大、中型后臺(tái)數(shù)據(jù)庫系統(tǒng)軟件所提供的多用戶及其權(quán)限設(shè)置都是針對(duì)數(shù)據(jù)庫的共有屬性,并不一定能完全滿足某些特例的需求;2?不要過多的依賴后臺(tái)數(shù)據(jù)庫系統(tǒng)軟件的某些特殊功能,多種大、中型后臺(tái)數(shù)據(jù)庫系統(tǒng)軟件之間并不完全兼容。否則一旦日后需要轉(zhuǎn)換數(shù)據(jù)庫平臺(tái)或后臺(tái)數(shù)據(jù)庫系
2、統(tǒng)軟件版本升級(jí),之前的架構(gòu)設(shè)計(jì)很可能無法重用。下面看看如何自行設(shè)計(jì)一套比較靈活的多用戶管理模塊,即該數(shù)據(jù)庫管理軟件的系統(tǒng)管理員可以自行添加新用戶,修改已有用戶的權(quán)限,刪除已有用戶。首先,分析用戶需求,列出該數(shù)據(jù)庫管理軟件所有需要實(shí)現(xiàn)的功能;然后,根據(jù)一定的聯(lián)系對(duì)這些功能進(jìn)行分類,即把某類用戶需使用的功能歸為一類;最后開始建表:功能表(Function_table)名稱類型約束條件說明f_idint無重復(fù)功能標(biāo)識(shí),主鍵f_namechar(20)不允許為空功能名稱,不允許重復(fù)f_descchar(50)允許為空功能描述用戶組表(User_
3、group)名稱類型約束條件說明group_idint無重復(fù)用戶組標(biāo)識(shí),group_namechar(20)不允許為空用戶組名稱group_powerchar(lOO)不允許為空用戶組權(quán)限表,內(nèi)容為功能表f_id的集合用戶表(User.table)名稱類型約束條件說明user_idint無重復(fù)用戶標(biāo)識(shí),主鍵user_namechar(20)無重復(fù)用戶名user_pwdchar(20)不允許為空用戶密碼user_typeint不允許為空所屬用戶組標(biāo)識(shí),和User_group.group_id關(guān)聯(lián)采用這種用戶組的架構(gòu)設(shè)計(jì),當(dāng)需要添加新用戶時(shí)
4、,只需指定新用戶所屬的用戶組;當(dāng)以后系統(tǒng)需要添加新功能或?qū)εf有功能權(quán)限進(jìn)行修改時(shí),只用操作功能表和用戶組表的記錄,原有用戶的功能即可相應(yīng)隨之變化。當(dāng)然,這種架構(gòu)設(shè)計(jì)把數(shù)據(jù)庫管理軟件的功能判定移到了前臺(tái),使得前臺(tái)開發(fā)相對(duì)復(fù)雜一些。但是,當(dāng)用戶數(shù)較大(10人以上),或日后軟件升級(jí)的概率較大時(shí),這個(gè)代價(jià)是值得的。四.簡潔的批量m:n設(shè)計(jì)碰到m:n的關(guān)系,一般都是建立3個(gè)表,m一個(gè),n—個(gè),m:n一個(gè)。但是,m:n有時(shí)會(huì)遇到批量處理的情況,例如到圖書館借書,一般都是允許用戶同時(shí)借閱n本書,如果要求按批查詢借閱記錄,即列出某個(gè)用戶某次借閱的所有書
5、籍,該如何設(shè)計(jì)呢?讓我們建好必須的3個(gè)表先:書籍表(Book_table)名稱類型約束條件說明book_idint無重復(fù)書籍標(biāo)識(shí),主鍵book_nochar(20)無重復(fù)書籍編號(hào)book_namechar(lOO)不允許為空書籍名稱借閱用戶表(Renter_table)名稱類型約束條件說明renter_idint無重復(fù)用戶標(biāo)識(shí),主renter_namechar(20)不允許為空用戶姓名借閱記錄表(RentJog)名稱類型約束條件說明rent_idint無重復(fù)借閱記錄標(biāo)識(shí),主鍵r_idint不允許為空用戶標(biāo)識(shí),和Renter_table.
6、renter_id關(guān)聯(lián)b」dint不允許為空書籍標(biāo)識(shí),和Book_table.book_id關(guān)聯(lián)rent_datedatetime不允許為空借閱時(shí)間為了實(shí)現(xiàn)按批查詢借閱記錄,我們可以再建一個(gè)表來保存批量借閱的信息,例如:批量借閱表(Batch_rent)名稱類型約束條件說明batch_idint無重復(fù)批量借閱標(biāo)識(shí),batch_noint不允許為空批量借閱編號(hào),同一批借閱的batch_no相同rent_idint不允許為空借閱記錄標(biāo)識(shí),和Rent_log.rent_id關(guān)聯(lián)batch_datedatetime不允許為空批量借閱時(shí)間這樣的設(shè)
7、計(jì)好嗎?我們來看看為了列出某個(gè)用戶某次借閱的所有書籍,需要如何查詢?首先檢索批量借閱表(Batch_rent),把符合條件的的所有記錄的rentjd字段的數(shù)據(jù)保存起來,再用這些數(shù)據(jù)作為查詢條件帶入到借閱記錄表(Rentjog)中去查詢。那么,有沒有什么辦法改進(jìn)呢?下面給出一種簡潔的批量設(shè)計(jì)方案,不需添加新表,只需修改一下借閱記錄表(Rentjog)即可。修改后的記錄表(Rentjog)如下:借閱記錄表(RentJog)名稱類型約束條件說明rent_idint無重復(fù)借閱記錄標(biāo)識(shí),jidint不允許為空用戶標(biāo)識(shí),和Renter_table.
8、renter_id關(guān)聯(lián)b_idint不允許為空書籍標(biāo)識(shí),和Book_table.book_id關(guān)聯(lián)batch_noint不允許為空批量借閱編號(hào),同一批借閱的batch_no相同rent_datedateti