繼續,這是第二章了。本來想在這一章裡面介紹三個表組來着,但是我有點寫不好的感覺,還是多分幾章吧,這一章就隻介紹人員表組。第二章到第五章主要是介紹表結構。我是習慣使用Excel來設計表,一開始的時候隻能記錄表名、字段名、字段類型、字段說明等資訊,但是一直沒能找到如何使用Excel來展現出來表之間的關系。前一陣子(好像是去年)突然想到了可以使用“圖表”+圖形(比如箭頭)的方式來做表關系,第一章裡的那幾個圖就是這麼弄出來的,看着還湊合吧。
至于為什麼不用PowerDesigner來做,個人習慣問題吧。Excel的特點是,可以很清晰的看到字段的資訊,因為往往字段比表關聯還要重要,是以我還是習慣使用Excel。現在更是離不開了。我現在可以做到依據這個Excel裡面的記錄來生成表(在SQL Server裡面建立表),生成配置資訊。而當需求有變化的時候,我也能做到Excel資料庫文檔、資料庫、配置資訊三者的同步更新。這個同步更新并不是手動去修改,而是通過一個“項目、配置資訊管理程式”來實作的,而這個“程式”也是自然架構的一部分,有一點IDE的苗頭。呵呵。
(一說“通用”我就想起了美國的那個通用,哎那麼大的公司就破産了。)
通用權限想要寫的文章目錄:(這是第二章)
1、 簡介、資料庫的總體結構
2、 介紹人員表組
3、 介紹組織結構表組
4、 介紹角色表組
5、 介紹“項目自我描述表組”
6、 權限到節點
7、 權限到按鈕
8、 權限到清單(表單、查詢)
9、 權限的驗證
10、 資源方面的權限
11、 角色管理的程式(給客戶用的)
12、 權限下放
13、 個性化設定
人員表組
先說一下表組,表組就是相關的一組表合在一起,表達一個整體的事物。這麼做的目的是避免表多了之後,畫出來的關系圖非常混亂的情況。人員表組就是人員密切相關的表。是密切相關的,而不是有一點關系的都放進來,因為80%以上的表都會和人員有關系,都放進來就失去意義了。
先看下圖:

人員表組裡的“老大”我給起個名字叫做“Person_Info”,就是人員的自然資訊(基本資訊),比如姓名、性别、出生日期等,每個人都會有這些資訊,而且隻有一份(如果需要記錄曾用名的話,那麼再加一個“曾用名”的字段)。這個表就是人員的基礎表(有一點基類的味道),“Person_Info”的主鍵叫做“PersonID”,int 自增。
具體字段如下:
字段名 | 中文名 | 字段類型 | 字段大小 | 預設值 | 是否為空 | 說明 |
PersonID | 主鍵 | int | 4 | 1 | ||
姓名 | nvarchar | 50 | _ | |||
性别 | nchar | 性别。直接寫漢字的男、女 | ||||
出生日期 | smalldatetime | GetDate() | ||||
身份證号碼 | varchar | 22 | ||||
國家 | 20 | |||||
省ID | 所在省份 | 外鍵 | ||||
市ID | 所在城市 | |||||
郵編 | 6 | 郵政編碼 | ||||
住址 | 員工住址 | |||||
AddedDate | 添加日期 | 記錄添加日期 | ||||
AddedUserID | 添加人 | 記錄哪個使用者添加的 | ||||
UpdatedDate | 最後修改日期 | 記錄最後修改日期 | ||||
UpdatedUserID | 最後修改人 | 記錄哪個使用者最後修改的 |
“Person_User_Info”,人員的登陸資訊,比如登陸賬号,密碼等。
這裡有一個麻煩的地方,如果限定一個人隻能有一個賬号的話,那麼就容易多了,我可以用“PersonID”作為“Person_User_Info”的主鍵,這樣關聯起來就很友善了。但是有的時候使用者會提出來,一個人要用兩個賬号,這樣我就必須給“Person_User_Info”設定一個自己的主鍵(“UserID”)了。你可能會說這也沒有什麼呀,但是對于我來說,這就不能做到和人員相關的表都使用“PersonID”關聯了,這個就很郁悶了。
UserID | 登陸賬号 | |||||
人員ID | ||||||
UserCode | ||||||
UserPassword | 登陸密碼 | MD5加密 | ||||
DepartmentIDs | 相關的部門 | 可以檢視哪些部門的相關資訊 | ||||
登陸次數 | 登陸的次數 | |||||
登陸IP | 16 | 登入時用戶端的IP | ||||
登陸時間 | datetime | 8 | 最後一次的登入時間 | |||
最後通路時間 | 用于線上統計 |
“Person_Employ_Company”,人員的公司方面的資訊,比如員工編号,入職時間等。如果一個人隻能在一個部門的話,那麼可以把部門ID放在這個表裡面,如果一個人可以在多個部門的話,那麼關聯就要另外設定一個表了。我采用了後者。這個表和權限沒有什麼關系,我就不貼字段了。
我們還可以根據客戶的情況添加不同的表來記錄客戶的資訊,當然對于權限來說,隻有“Person_Info”和“Person_User_Info”是必須的,其他的都是可選的。
提取出來“Person_Info”的目的就是為了能夠“擴充”,如果我們給企業做項目,那麼就需要加上一些保險資訊,調崗記錄,等等的相關的表,而給學校做項目的話,那就是另外一些列的表了。就是說我們不管做什麼樣的項目,“Person_Info”和“Person_User_Info”可以保持不變,這樣就穩定了。
ps:看了大家的評論,我也是越想越多,越想越複雜,總是感覺這麼做不對,那麼做也欠缺一點,還是先不要想那麼多,想把自己想好的寫出來,然後在改進吧。