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”的分页法
等等 这些东西都非常的重要,还有数据库相关的知识。

现在看到 从某一个角度来讲的话 面向对象的思想其实就是一个噱头
归根,程序的执行和功能实现 要落在一个个的函数上



构建一个能够随时查询的知识库非常的重要,因为大脑并不能保证所有的知识都处在使用的状态,那么将那些能够使用的知识储存起来,就非常的必要了 

学习吸引力

很牛逼的人一定很有钱 反过来 很有钱的人一定很牛逼

如果你不进行深入的话,你是没有办法体会其中的妙处的
就是爱爱一样,不努力前进的话是没有办法体会其中的妙处的 多以一定要的深入 继续深入!
发布了102 篇原创文章 · 获赞 3 · 访问量 9182

猜你喜欢

转载自blog.csdn.net/yueyekonglong/article/details/104040603