ASPNETDB 數據庫關係圖、表和視圖(1) 基本表和獨立表

ASPNETDB 數據庫關係圖、表和視圖(1) 基本表和獨立表

    數據庫關係圖、表和視圖(1)  基本表和獨立表

    ASPNETDB 這個隱藏在ASP.NET 2.0四大“插件”
  (
     SqlMembershipProvider、
     SqlRoleProvider、
     SqlProfileProvider、
     SqlPersonalizationProvider
    )
    之後,時不時在你App_Data目錄下幽靈般出現的SQL數據庫,其實也並沒什麼神奇之處,
    我等凡夫俗子進去一看,原來也不過如此。不過如果我們要編寫自定義Provider的話,
    還是得仔細研究一下下的,因爲這4個Provider大部分的業務邏輯還是“封裝”在這個數據庫裏的。
    下面,就容我這個老小弟,爲各位兄弟理出裏面的表、視圖和存儲過程。
    
    注:其實還有SqlWebEventProvider,它用到表aspnet_WebEvent_Events和存儲過程aspnet_WebEvent_LogEvent。
    因爲老小弟認爲從性能上考慮,寫入本地文件是更好的選擇,所以在此不作介紹。
    另外,還有個和ASPNETDB無關的SiteMapProvider,主要配合SiteMapPath 等控件,一般以Xml文件形式存放站點地圖。

    看張“地圖”先:

    數據庫關係圖
aspnetdb Diagram
   這張圖還是蠻重要的,兄弟們在看後面的內容時,還是要常回來看看,回來看看。
  
      
     在ASPNETDB數據庫的幾個表中,都有名稱爲Lowered***的字段,
     這些字段用來存放***字符串字段的小寫形式副本。
     因爲這些***字符串字段的比較都是不區分大小寫,在表中存放一個小寫形式副本,
     能提高字符串比較的速度。
   
     基本表 aspnet_Application、aspnet_Users
  1. 應用程序表
    aspnetdb Diagram

    每個Provider都有一個ApplicationName屬性,該屬性一般定義在web.config中。
    舉一個ProfileProvider的例子(其餘3個Provider也一樣):

    <system.web>
      ...
      <connectionStrings>
        <add connectionString="..."/>
      </connectionStrings>
      ...
      <profile defaultProvider="SqlSrvProfileProvider">
         <providers>
          <add
            type="System.Web.Security.SqlProfileProvider"
            connectionStringName="SqlSrvConnectionString"
            applicationName="WebShop" 
            commandTimeout="30"
            description="SqlSrvProfileProvider" />
         </providers>
        <properties>
          ...
        </properties>
      </profile>
      ...
    </system.web>

    這樣你就爲你的應用程序註冊了一個"WebShop"名稱
    (也可以不明確配置applicationName值,默認爲應用程序的虛擬根路徑,即"/")。
    要注意的是如果你那天把"WebShop"改成了"WebShop1"
    (改成"webshop"、"webShop"等就和沒改一樣,因爲應用程序名稱是不區分大小寫的),
    你以前的用戶自定義屬性值就人間蒸發了,因爲ProfileProvider把"WebShop1"
    當作一個新的應用程序又新註冊了一遍(這時候看過我這篇文章的兄弟
    就該知道怎麼辦了,哈哈)。

    那4個Provider是否一定要配置成同樣的applicationName呢?當然不必要啦!
    你爲每個Provider各建一個數據庫都沒有關係,何況區區applicationName值呢。
    不過在此老小弟建議各位兄弟,別沒事找事,還是取一樣的名稱好。
  2. 基本用戶表
    aspnetdb Diagram

    表中MobileAlias字段(以及用戶成員資格表aspnet_MemberShip中的MobilePIN字段),
    沒見在那裏用到。老小弟猜想微軟這樣做有兩種可能:一種是想以後帳戶和手機綁定,
    另一種可能就是爲手機上網而預留的。

    不知各位DBA兄弟有沒看出這個表與它的幾個從表的關係,有點不太“講道理”,
    居然有2個一對一的關係。“爲什麼不合並?不知道第3範式啊?”,老小弟
    以前想裝文化人的時候,總是這樣嚇唬小小弟的。若干年後,當老小弟看了幾本
    架構/模式的書,自我掃盲之後,才知道其實這是ORM模式中的一種。

    另外,微軟工程師這樣設計還是非常巧妙的。在將公有部分提成幾張基本表後,
    數據庫關係圖4個部分就可合可分了。你可以試着在數據庫關係圖蓋掉某幾個部分,
    剩下的部分仍然能夠成一個完整的系統。

    最後再交待一下IsAnonymous和LastActivityDate兩個字段。
    因爲個性化用戶配置和頁面個性化設置能夠支持匿名用戶,所以該表中也會存在匿名用戶,
    IsAnonymous字段就是指示用戶是否爲匿名用戶的標誌字段。
    LastActivityDate字段記錄用戶最後活動時間。該字段十分重要,每次成功的操作都會更新它,
    同時它也是判斷用戶是否爲非活動用戶的依據之一。很多存儲過程都會用到它。
         在分塊描述4大部分之前,先容我簡單地介紹一下兩個獨立的表:
         aspnet_WebEvent_Events表:記錄數據操作的事件日誌(可由SqlWebEventProvider啓用)。
         aspnet_SchemaVersions表:
         aspnetdb Diagram
         把它的內容貼出來,各位一看就知道了。原來是微軟爲數據庫中的各個部分設置的版本號。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章