天天看點

【自然架構】之通用權限(二):人員表組(轉)

  繼續,這是第二章了。本來想在這一章裡面介紹三個表組來着,但是我有點寫不好的感覺,還是多分幾章吧,這一章就隻介紹人員表組。第二章到第五章主要是介紹表結構。我是習慣使用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:看了大家的評論,我也是越想越多,越想越複雜,總是感覺這麼做不對,那麼做也欠缺一點,還是先不要想那麼多,想把自己想好的寫出來,然後在改進吧。