DTcms-【數據庫】-關係分析

數據庫實體關係分析

模型與頻道【主從關係】

一個頻道可以有多個模型
一個模型又可以應用於多個頻道

模型與系統菜單【主從關係】

一個模型下面有多個系統菜單

頻道與分類【主從關係】

一個頻道有多個的分類
一個分類只屬於某一個頻道
 
關鍵提示
class_list  記錄該節點的上級父節點
class_layer 該節點所處的節點深度 默認是1層 即頂層

頻道與文章

一個頻道有多篇文章
一個文章只屬於一個頻道

文章與評論 

一篇文章可以有多個評論
一個評論歸屬於哪一個頻道,哪一篇文章
評論: 某個ID爲5的用戶在某個頻道的某個分類的某篇文章發表了評論信息


問題:頻道是否可以發表文章?
單頁模型可以解決這個問題
一篇文章必須發表某個頻道的某個分類裏面【如果頻道是單頁模型除外】
dt_contents該表的作用在於 單頻道模型,存儲直接在頻道中發佈信息的內容

下載信息和下載附件表【主從關係】

一個下載信息,可以有多個附件

圖片信息 和 圖片相冊表
 
關係最複雜的一個地方
一篇圖文信息具有多張圖片

dt_photo 用來記錄圖文信息

dt_photo_album 用來記錄圖片大圖小圖的路徑信息 【相冊】

dt_photo_attribute 用來記錄圖文信息的【所有的】附件屬性 此表是獨立的 一個圖文信息可以有多個附件的屬性值 

dt_photo_attribute_value 用來記錄某一個【圖文信息】的附件屬性值 同時也引用了dt_photo_attribute的主鍵,表示該圖文屬性來自於哪裏。當一個附加的屬性被刪除時,他對應的值也應該被刪除。

通過以上的分析:dt_sys_channel表是系統的核心 

總結這些項目收穫

1.數據庫非常的重要
2.遇到不懂的,同時有沒有阻礙自己前進的函數,可以繞過去 
3.通過要實現的功能,理解寫的函數就非常的容易了
4.程序設計最終還是在於算法的掌握 而算法 其實就是對問題的分析,並找到方法的能力
5.理解數據庫的三種關係:一對一 一對多 多對多
6.如何知道數據庫每一個值的作用呢?
在網站的後臺添加相關的數據觀察數據表的變化

第一個階段
1.程序是怎麼啓動的?
2.URL重寫的機制?
3.模板引擎? 模板引擎到底有多強大?

第二個階段
熟悉裏面的函數集


架構關係 

三層架構關係
DTcms.Common 通用的函數類 輔助作用
DTcms.DBUtility 數據庫的訪問助手
DTcms.DAL 數據訪問層 具體到某一個數據的訪問  
DTcms.Model 封轉模型實體
DTcms.BLL 業務層 對數據的增刪查改否在這裏進行 
DTcms.Web 界面層  
DTcms.Web.UI 處理界面的邏輯

*******************************************************************


系統登錄流程分析

實現的思路是就是通過繼承的機制 添加 “Manage類”來實現的

用戶登錄成功之後,獲得登錄用戶的實例對象,保存在Session裏面

一個系統賬戶只對應一個用戶,沒有什麼問題 
如果一個賬戶被兩個用戶同時登錄會面臨着什麼問題?
關於賬戶登錄狀態,類似於迅雷賬戶,如果出現多處登錄的話,將作出什麼樣的處理呢?
權限控制思路
 
如何保護那些通過驗證的請求的 
這裏很明顯 沒有使用 微軟的驗證的思路 完全是自己定義實現的 
角色權限表:記錄一種角色可以執行那些操作
 
權限的實現思路 沒有對應的權限就不顯示響應的菜單操作選項,系統中這一點做的不是很好,每次操作都要判斷有沒有權限 這一點 不好
只要用戶沒有權限壓根就不應該顯示那些操作的菜單 否則就沒有什麼意思了

登錄 --- 驗證--- 通過 ----獲得角色信息 ---動態的加載菜單和響應的操作選項 

程序的入口點就是:login.aspx

系統中一個用戶是否能有多個角色?
在該系統中並沒有實現 “用戶”和“角色”多對多的關係 只是實現了一對一的關係
一個角色可以有多個用戶存在 ,這是一定的

頻道 角色 操作 
根據當前用戶的角色id, 頻道ID 和操作的類型 來進行判斷
描述:“角色ID=3”的用戶對“頻道2”有“添加操作”,可是通過

********************************************************************************************************************************
 

關於程序發佈之後的部署問題

關於權限問題 在IIS7和iis6下面的

幾個比較重要的目錄
AppData temp Temporary ASP.NET Files

數據庫文件
配置文件  
目錄的訪問

賬戶:IIS_WPG IIS_User NETWORK
temp 必須具有NETWORK寫入的權限 
擴展問題:關於系統用戶賬戶的問題  

關於站點目錄權限
1. WIN2003 + IIS 6.0:需要站點目錄給予ASP.NET , IUSER , IWAN , NETWORK SERVICE 讀寫權限。
2. WIN2008 + IIS 7:需要站點目錄給予USER , NETWORK SERVICE讀寫權限,IIS 設置和上面的IIS6 的設置基本一致。

2.URL的配置問題
添加你想要的擴展名:".html",".do" 並且把這些請求也交給aspnet_isapi.dll來處理
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll

既然這樣爲什麼還要使用第三方組建呢?答案是性能的問題,在IIS層級做URL的重寫 要比
asp.net更加的高效。即使是asp.net的層級第三方的效率也要高很多。
況且被系統的重寫組建效率不是很好

********************************************************************************************************************************
系統中緩存
一次是:緩存站點的僞URL信息類 ,SiteUrl類對“URL的配置文件進行了二次的封裝” URLRewrite文件
二次是:緩存了站點的配置文件


關於HttpApplication事件執行的順序 

在應用程序啓動之後,就開始加載系統所有的自定義的HttpModule模塊 

在運行的過程中.修改了WebConfig文件之後就會結束當前的回話,然後就會釋放掉自定義的module模塊佔用的資源 

執行的順序列表如下
1.Application_Start
2.加載---初始化---所有的模塊 包括自定義的 在運行直接說這裏會加載 所有的模塊【包括自定義的】
自定義的模塊應該優先於系統內置的模塊執行

3.Application_BeginRequest 開始請求
4.Application_AuthenticateRequest 驗證請求 

5.Session_Start 會話狀態啓動

頁面級別
6.Page_Load 頁面級別的時間開始執行  
然後每一個請求的來臨就開始執行3,4的步驟,瞭解了這個執行的順序之後

URL重寫的關鍵地方在哪裏?

控制重寫的地方在哪裏?
當創建了一個上下文請求實例的時候 就應該開始對該請求進行控制
我們要實現URL的重寫機制,就要在context進行控制
HttpApplication並不對請求做任何的處理,提供場所,讓內置的模塊進行控制和處理, 管道,逐個引爆事件 

************************************************************************************************************************************
關於數據庫設計

在刪除一條數據的時候也將對象的評論信息刪除掉,通過這種方式來保證數據的完整性
這是一個用來執行多條SQL語句的例子

這個channel_id起到一個外鍵標識的作用 使用它貫穿在整個的數據庫中就可以不用設置外鍵
只是在刪除數據的時候多做了一些操作 這是個很不錯的應用哦。不建立外鍵關係 
使用一個字段來連接整個數據庫
 
心得:在不清楚數據庫的詳細設計的時候是不建議使用外鍵關係的

在Discuz中所需要的數據庫字段都被封裝成了靜態的字段 好處是不言而喻的【避免出錯】

就像是數據表的閱讀,表面上看好像是那麼個道理,但是事實上卻不是如此的
只要按着作者的腳步一步步的進行下去方能體會其中的妙處的

連接對象到底關閉還是不關閉呢?

凡是傳入“打開的連接”的對象,在發生異常的時候都沒有關閉連接對象
這種類型的方法是在同一個連接對象中使用的
在同一個連接對象中,使用事務的方法做多件事情。【這個是系統函數中存在一個現象】

關於添加分類的時候需要做哪些事情呢?


爲什麼程序中不建立外鍵呢?

如果不建立主外鍵的關係 就應該使用編程的方式盡最大的可能,保持數據的完整性
不管一個數據庫是否添加外鍵關係,表與表之家的關係是不可能解除的,即使沒有一條
主外鍵的關係,爲了保持數據的完整性,就必須通過編程的方式進行實現 。


事務的使用在後臺執行添加修改的使用非常的重要的


***********************************************************************************

功能的理解

功能的實現其實就是一系列的的算法,所以應該努力的培養自己的邏輯思維的能力

要學習C語言,着重於算法的實現和問題的解決,之後還要學習數據結構

不學習這些東西的話,很多系統中的算法都沒有辦法實現, 比如說“雙Top”的分頁法
等等 這些東西都非常的重要,還有數據庫相關的知識。

現在看到 從某一個角度來講的話 面向對象的思想其實就是一個噱頭
歸根,程序的執行和功能實現 要落在一個個的函數上



構建一個能夠隨時查詢的知識庫非常的重要,因爲大腦並不能保證所有的知識都處在使用的狀態,那麼將那些能夠使用的知識儲存起來,就非常的必要了 

學習吸引力

很牛逼的人一定很有錢 反過來 很有錢的人一定很牛逼

如果你不進行深入的話,你是沒有辦法體會其中的妙處的
就是愛愛一樣,不努力前進的話是沒有辦法體會其中的妙處的 多以一定要的深入 繼續深入!
發佈了103 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章