Posted on 2005-04-15 08:46
二十四画生 阅读(8944)
评论(42) 编辑 收藏 网摘 所属分类:
ASP.NET Starter Kits
ASP.NET Portal Starter Kit数据库结构总体上来讲是由网站引擎的核心表(用户表、角色表和角色关系表)和各个用户模块相关的表组成。核心表存储整个网站的用户权限的配置信息(详细的用法及说明将放到《角色身份认证篇》中讲)。各用户模块存储各个功能模块的信息。各个用户功能模块表都是独立的。这样有利于新增模块扩展功能。同时也可将各个功能模块的表分别部署到不同的数据库中提高程序的高伸缩性和可扩展性。数据的访问方式是全部通过存储过程进行的。这样做的好处有:1、提高了数据库的性能;2、杜绝了SQL注入式攻击(在我的理解上应该是);3、可将可将连接到SQL Server数据库用户的权限只配置成只能对指定存储过程进行执行操作,这样就进一步提高了数据库的安全性。
数据库中的表:
Portal_Announcements:公告信息表(在公告信息模块中用)
|
字段名 |
类型 |
含义 |
备注 |
|
ItemID |
Int |
链接Id |
主键(自动编号) |
|
ModuleID |
Int |
所属模块ID |
决定该公告在那个模块中显示(模块ID:用户配置文件PortalCfg.xml中的模块表ID,以下皆同) |
|
CreatedByUser |
Nvarchar(100) |
创建者 |
记录创建和修改该公告的用户 |
|
CreatedDate |
Datetime |
创建时间 |
记录创建和修改该公告的时间 |
|
Title |
Nvarchar(100) |
名称 |
|
|
MoreLink |
Nvarchar(150) |
更多细节的链接 |
|
|
MobileMoreLink |
Nvarchar(150) |
移动细节链接地址 |
在“移动设备浏览器”上的更多细节链接地址 |
|
ExpireDate |
Datetime |
有效日期 |
|
|
Description |
Nvarchar(2000) |
描述 |
|
Portal_Contacts:联系方式信息表(在联系方式模块中用)
|
字段名 |
类型 |
含义 |
备注 |
|
ItemID |
Int |
链接Id |
主键(自动编号) |
|
ModuleID |
Int |
所属模块ID |
决定该联系方式在那个模块中显示 |
|
CreatedByUser |
Nvarchar(100) |
创建者 |
记录创建和修改该联系方式的用户 |
|
CreatedDate |
Datetime |
创建时间 |
记录创建和修改该联系方式的时间 |
|
Name |
Nvarchar(50) |
联系人姓名 |
|
|
Role |
Nvarchar(100) |
联系人角色 |
与系统框架中的角色不同,理解成职位更合适 |
|
Email |
Nvarchar(100) |
联系人Email |
|
|
Contact1 |
Nvarchar(250) |
联系方式1 |
|
|
Contact2 |
Nvarchar(250) |
联系方式2 |
|
Portal_Discussion:用户讨论留言信息表(用户讨论模块用)
|
字段名 |
类型 |
含义 |
备注 |
|
ItemID |
Int |
链接Id |
主键(自动编号) |
|
ModuleID |
Int |
所属模块ID |
决定该讨论在那个模块中显示 |
|
Title |
Nvarchar(50) |
讨论标题 |
|
|
CreatedDate |
Datetime |
创建时间 |
记录创建该讨论的时间 |
|
Body |
Nvarchar(100) |
留言内容 |
|
|
CreatedByUser |
Nvarchar(100) |
创建者 |
记录创建和修改该讨论的用户 |
|
DisplayOrder |
Nvarchar(100) |
显示顺序 |
记录回复的讨论的时间和本身提交的时间 (可用作讨论留言的排序和显示回复关系) |
Portal_Documents:用户上传文档信息表(在显示文档信息模块中用)
|
字段名 |
类型 |
含义 |
备注 |
|
ItemID |
Int |
链接Id |
主键(自动编号) |
|
ModuleID |
Int |
所属模块ID |
决定该联系方式在那个模块中显示 |
|
CreatedByUser |
Nvarchar(100) |
创建者 |
记录创建和修改该联系方式的用户 |
|
CreatedDate |
Datetime |
创建时间 |
记录创建和修改该联系方式的时间 |
|
FileNameUrl |
Nvarchar(250) |
|
上传至服务器中的文件路径 |
|
FileFriendlyName |
Nvarchar(150) |
文档名称 |
友好的文件名称显示 |
|
Category |
Nvarchar(50) |
类别 |
|
|
Content |
Image |
内容(二进制) |
上传到数据库中的内容 |
|
ContentType |
Nvarchar(50) |
类型 |
上传文件的类型 |
|
ContentSize |
Int |
大小 |
上传文件的大小 |
Portal_Events:事件信息表(在显示事件信息的模块中使用)
|
字段名 |
类型 |
含义 |
备注 |
|
ItemID |
Int |
链接Id |
主键(自动编号) |
|
ModuleID |
Int |
所属模块ID |
决定该事件在那个模块中显示 |
|
CreatedByUser |
Nvarchar(100) |
创建者 |
记录创建和修改该事件的用户 |
|
CreatedDate |
Datetime |
创建时间 |
记录创建和修改该事件的时间 |
|
Title |
Nvarchar(100) |
事件名称 |
|
|
WhereWhen |
Nvarchar(150) |
发生地点 |
|
|
Description |
Nvarchar(2000) |
描述 |
|
|
ExpireDate |
Datetime |
有效日期 |
|
Portal_HtmlText:静态HTML信息表(在显示静态静态HTML的模块中用,可用于显示新闻等文本)
|
字段名 |
类型 |
含义 |
备注 |
|
ModuleID |
Int |
所属模块ID |
决定该静态HTML在那个模块中显示(主键,限定一个模块只对应一个静态HTML文件) |
|
DesktopHtml |
Ntext |
桌面HTML内容 |
|
|
MobileSummary |
Ntext |
移动摘要 |
在“移动设备浏览器”上显示的摘要 |
|
MobileDetails |
Ntext |
移动细节 |
在“移动设备浏览器”上显示的细节 |
Portal_Links:链接信息表(快速链接模块和连接模块用)
|
字段名 |
类型 |
含义 |
备注 |
|
ItemID |
Int |
链接Id |
主键(自动编号) |
|
ModuleID |
Int |
所属模块ID |
决定该链接在那个模块中显示 |
|
CreatedByUser |
Nvarchar(100) |
创建者 |
记录创建和修改该链接的用户 |
|
CreatedDate |
Datetime |
创建时间 |
记录创建和修改该链接的时间 |
|
Title |
Nvarchar(100) |
名称 |
|
|
Url |
Nvarchar(250) |
链接地址 |
|
|
MobileUrl |
Nvarchar(250) |
移动链接地址 |
|
|
ViewOrder |
Int |
排序号 |
|
|
Description |
Nvarchar(2000) |
描述 |
|
Portal_Roles:角色信息表(门户网站引擎核心表)
|
字段名 |
类型 |
含义 |
备注 |
|
RoleID |
Int |
角色Id |
主键(自动编号) |
|
PortalID |
Int |
门户网址ID |
可架设多个门户站点而共用一个数据库,通过PortalID区分 |
|
RoleName |
Nvarchar(50) |
角色名称 |
|
Portal_UserRoles:用户角色关系表(门户网站引擎核心表)
|
字段名 |
类型 |
含义 |
备注 |
|
UserID |
Int |
用户Id |
关联用户信息表(Portal_Roles) |
|
RoleID |
Int |
角色Id |
管理角色信息表(Portal_Users) |
Portal_Users:用户信息表(门户网站引擎核心表)
|
字段名 |
类型 |
含义 |
备注 |
|
UserID |
Int |
用户Id |
主键(自动编号) |
|
Name |
Nvarchar(50) |
用户姓名 |
|
|
Password |
Nvarchar(50) |
密码 |
采用MD5的加密方式存储 |
|
Email |
Nvarchar(100) |
用户Email |
用于登录,并设置成唯一性索引(可防止注册相同的Email,这样设置后当有相同的Email插入时程序就会抛出异常,捕获这个异常就可判断Email是否重复,这样就可以省掉判断Email是否重复的代码) |
数据库中的存储过程:
|
存储过程名称 |
说明 |
|
Portal_AddAnnouncement |
添加新公告 |
|
Portal_AddContact |
添加新联系方式 |
|
Portal_AddEvent |
添加新事件 |
|
Portal_AddLink |
添加新链接 |
|
Portal_AddMessage |
新建一条新的讨论留言,其中@ParentID的参数为被回复留言的Id,通过该ID找到该留言的DisplayOrder,加上新增留言的时间就是新留言的DisplayOrder。 |
|
Portal_AddRole |
添加角色信息 |
|
Portal_AddUser |
添加一个新用户,返回用户的Id |
|
Portal_AddUserRole |
添加用户角色关系 |
|
Portal_DeleteAnnouncement |
删除公告信息(注:以下删除部分若无特殊说明均为删除指定ItemID的信息) |
|
Portal_DeleteContact |
删除联系方式 |
|
Portal_DeleteDocument |
删除用户上传文档 |
|
Portal_DeleteEvent |
删除事件信息 |
|
Portal_DeleteLink |
删除链接信息 |
|
Portal_DeleteModule |
当删除一个模块时,联动的删除该模块相关的全部信息 |
|
Portal_DeleteRole |
删除角色信息 |
|
Portal_DeleteUser |
删除用户 |
|
Portal_DeleteUserRole |
删除角色用户关系 |
|
Portal_GetAnnouncements |
根据ModuleID(模块ID)返回有效期内的公告信息 |
|
Portal_GetAuthRoles |
像是没有用到该存储过程,而且该存储过程涉及的表数据库中没有(在用户配置文件中有类似的表),需要在深入研究 |
|
Portal_GetContacts |
根据ModuleID(模块ID)返回联系方式 |
|
Portal_GetDocumentContent |
根据文档的(ItemID)获取存储在数据库中的文档信息 |
|
Portal_GetDocuments |
根据ModuleID(模块ID)返回用户上传文档信息 |
|
Portal_GetEvents |
根据ModuleID(模块ID)返回有效期内的事件信息 |
|
Portal_GetHtmlText |
根据ModuleID(模块ID)返回静态HTML文本信息 |
|
Portal_GetLinks |
根据ModuleID(模块ID)返回连接信息,并按(ViewOrder)排序号排序 |
|
Portal_GetNextMessageID |
获取讨论的下一条留言 |
|
Portal_GetPortalRoles |
获取指定门户站点(指定PortalID)的全部角色信息 |
|
Portal_GetPrevMessageID |
获取讨论的上一条留言 |
|
Portal_GetRoleMembership |
根据角色ID获取该角色对应的用户成员信息 |
|
Portal_GetRolesByUser |
根据用户Email获取用户角色信息 |
|
Portal_GetSingleAnnouncement |
根据公告的(ItemID),获取单个公告的信息 |
|
Portal_GetSingleContact |
根据联系方式的(ItemID),获取单个联系方式的信息 |
|
Portal_GetSingleDocument |
根据文档的(ItemID),获取单个文档的信息 |
|
Portal_GetSingleEvent |
根据事件的(ItemID),获取单个事件的信息 |
|
Portal_GetSingleLink |
根据链接的(ItemID),获取单个链接的信息 |
|
Portal_GetSingleMessage |
根据留言的(ItemID),获取单个留言的信息 |
|
Portal_GetSingleRole |
根据角色ID,获取单个角色的信息 |
|
Portal_GetSingleUser |
根据用户Email,获取单个用户的信息 |
|
Portal_GetThreadMessages |
根据父留言信息的DisplayOrder,返回按时间顺序和回复关系返回子留言信息 |
|
Portal_GetTopLevelMessages |
根据ModuleID(模块ID)返回顶层留言信息 |
|
Portal_GetUsers |
获取全部的用户信息,并按Email排序 |
|
Portal_UpdateAnnouncement |
更新公告信息 |
|
Portal_UpdateContact |
更新联系方式信息 |
|
Portal_UpdateDocument |
更新文档信息,当未找到指定文档ID时添加新的文档信息 |
|
Portal_UpdateEvent |
更新事件信息 |
|
Portal_UpdateHtmlText |
更新静态HTML文本信息 |
|
Portal_UpdateLink |
更新指定的连接信息 |
|
Portal_UpdateRole |
更新角色信息 |
|
Portal_UpdateUser |
更新用户信息 |
|
Portal_UserLogin |
根据email和password返回登录的用户姓名(用于判断用户登录是否通过) |
更多相关内容:点击这里>>
Feedback
@ocean2000
我大慨准备分:数据库篇,用户配置文件篇,代码文件篇,角色身份认证篇,重构篇这几个部分来讲解。现在我正在分析并重构代码和做代码注释工作。等我有了新的认识会继续Post出来的。
1.我粗略的看了一下数据库的存储过程,基本上还没有发现较复杂的过程。不过还是想听听画生兄的意见。如果把这个数据库转换为Access的可行性有多大?还有,感觉上Protal的数据层和中间层好像基本在一起的。如果要更换不同的数据类型时就要做较大的改动。我觉得应该可以用DAAB改一改数据层会让网站整体跟数据源的兼容性更强。
2.还有一点我觉得用SQL存储过程并不能完全抵御注入式攻击。SQL的补丁要加上,原本一些master数据库里带有危险而不经常用的存储过程要去掉才能保证安全。
以上都是我的拙见,不正的地方还请大家多指正。
@西门吹雪
ASP.NET Portal Starter Kit表不多,存储过程也不多。将它转换成Access的应该没有问题。
各位好,我已经把数据库转成access了,只是把存储过程转成Sql语句,用Ole的操作数据库的类,基本上没什么问题,主要转换完后,一些数据的类型要更改。希望各位注意
请问画生兄 我安装 portal starter kit 时,一路next 最后测试数据库也提示成功,但之后显示"系统找不到指定路径" 进度条向后退回,按下确定后 电脑上什么也没有留下:(
这是怎么一回事呢?
我的系统是 wins2003 sqlserver2000
谢谢
恩 数据库已经建立了,应该是安装到IIs是失败了
不过我已经用链接里的源码手动安装了
thx :)
谁能提供转化为支持Access数据库的版本呢?
万分感谢!!!!急用阿
对于讨论组模块,发现即使是管理员也不能删除topic,有什么好地解决方案,还有一个,对于contact模块,我想对于edit功能给与限制,我希望某一类用户只能添加contact,不能修改以前的contact怎么入手,谢谢高手赐教:)
请教各位:
我在安装到测试连接时会失败,不知道咋回事?
我的环境是:WinXP,SQLServer2000Personal.
原来有这么多人希望要这个东西的ACCESS版?我已经将它转换了。有兴趣的请交流
Portal_Documents表
FileFriendlyName 字段的备注有问题,
原备注为:“ 与系统框架中的角色不同,理解成职位更合适”
看数据库给出的值“Employee Handbook,Annual Reviews......” ,应该是文档的一种描述性名称,估计应该是画生兄手误,因为这个备注的内容在Portal_Contacts也有:)
@小新0574
呵呵,是复制粘贴时忘了删除的原因。
二十四画生大侠:
在potal如何实现象solpartmenu一样的有层次结构的tab?
多个门户站点如何通过PortalId来共享一个数据库?
@hailinger
这个你直接看DotNetNuke好了,你说的功能DNN都有。
二十四画生大侠:
DNN确实功能强大多了,可是也复杂多了!!!:(能如何才能快速上手,用户催得我要跳楼了:)
我试着用DNN创建了二个新网站,可是portal数据表中的数据永远只有一行,portalID字段“始终不变”,其他字段在变。也就是说“多个门户站点如何通过PortalId来共享一个数据库”没有实现?????
@hailinger
在DNN中的确是多个门户站点共用一个数据。每个站点绑定不同的域名(别名)。通过输入不同的网址就可以访问不同的站点,很方便!
在DNN中用host用户登录,在“主机管理-->站点管理”中就可添加新网站。
DNN架构复杂,应用却一点也不复杂。有很多现成的模块和皮肤可以使用(当然不少是要收费的),用DNN来建立门户网站比自己开发要快的多。
今天早上第一件就是想告诉大侠,我成功了!谢谢!但我还不知道每个站点可以绑定不同的域名(别名)。
对portal我研究了不少,现在完全放弃了,用DNN。DNN架构复杂在那些地方?
DNN不是全部开源的吗?DNN有没有ORACLE版的?
哪些模块和皮肤要收费?可以自己添加容器吗?
用户要求我在上面做很多二次开发!!还要向大侠多多请教!
@hailinger2003
要了解DNN架构大概可以重以下几个方面入手:
1、可支支持多数据库访问的架构。(包括缓存应用)
2、多语言支持架构。
3、强大的功能模块支持架构
4、皮肤的支持架构
5、事件日志
6、调度
7、安全(身份认证及授权)
8、搜索引擎
9、等等。。。。。。。。。。。
只要你深入下去,你会发现DNN会有很多值得你学习的地方。要扩充功能可以从开发DNN模块入手,毕竟修改DNN的核心架构还不是一件很容易的事。开发模块可以一开始造自带模块做,随着开发的深入逐渐了解调用到的基类,慢慢的你就可以了解DNN的内核了。
大侠:
能留个联系电话吗?想急切地与你有更多地交流.
二十四画生大侠:
:(为什么没有你的消息……
DNN的Oracle版需要把每个项目下的Providers\DataProviders\SqlDataProvider
都改为OracleDataProvider,然后在Web.config更改数据配置,对吗?
我打开defualt.spx,出现以下错误:
在web窗体中未能加载该文件。请更正下列错误,然后尝试重新连接。
文件中的类都不能进行设计,因为未能为该文件显示设计器。设计器检查文件中有以下类:
CDefualt-未能加载基类“DotNetNuke.FrameWork.PageBase”.如果程序集是项目的一部分,请确保它已被引用或生成。
确保在项目中生成或者引用了页中使用的所有类。如需更多信息,请单击“帮助”。
这是为什么?在哪里能下载没有错误的汉化版dnn
我是一个笨鸟
@hailinger
“打开defualt.spx出现以下错误”,我这里也是。好在我不用设计试图,所以对我没有影响,就一直没有想办法解决。要让DNN支持Oracle,这绝对不是一个小的工程,你需要重新在Oracle中建表(70几个表),写存储过程(300多个)。然后需要重写全部对应的OracleDataProvider。虽说工作量大,不过也只是一个照搬的过程,只要熟悉Oracle和SQL Server之间的差别,加上细心就可以了。要想没有错误的汉化版dnn,只有自己动手了。告诉我你的QQ或msn我加你。很高兴又认识一个想深入研究DNN的朋友。
dnn的sqlserver版是在安装时形成的表和存储过程,那么Oracle也可以这样?
我的qq:1668853
@hailinger
对可以这样,不过脚本需要自己编写,后缀名为.OracleDataProvider。
你听说过sharepiont吗?与dnn相比谁好?
中文语言包安装后就自动汉化完了吗?
@hailinger
sharepiont听说过没用过,不知道和dnn相比谁好。
中文语言包安装完成后还需要设置一下网站的时区语言信息,以及个人资料的时区语言信息。DNN可以根据不同的用户和网站设置显示不同的语言界面。具体可以到中国DNN网站上下载一个安装视频,我以前的文章好像也有介绍。
如果你今后有什么问题,可以通过QQ留言和Email方式,毕竟这一贴和DNN的关系不大。
如何才能和你在线交流?
我用codesmith2.6希望产生新建数据库的存储过程,点“generate”按钮后,可是它的属性Panel没出现?
期末马上到了,SQLSERVER要求交一题程序题,但老师教的太烂,全班没人会,特向大虾请教,望尽快回复!!!
E-mail:janey_hqj@163.com
QQ:335126718
项目设计
根据如下需求,设计数据库关系模式(要求定义完整性约束并使该模式符合3NF),并完成相应的DDL/DML操作(SQL语句中可利GetDate()函数获得系统日期)。
1. 某校图书馆管理系统中储存着馆藏书籍、读者及读者借阅书籍的信息。每位读者有一张借书证(证号是唯一的);每本书籍均有一个唯一的书籍序号、并有统一的分类号及关键词;图书馆记录着读者借阅书籍的日期、状态及还书日期;同一位读者不会在同一天重复借阅同一本书籍(书籍序号相同)。
2. 统计该图书馆中数据库类(关键词中为“数据库”)书籍的藏书情况(含书名、分类号、出版社、作者、馆藏数)。
3. 统计已借阅(尚未归还)5本(或以上)书籍的读者的证号、姓名、单位及借阅的册数。
4. 列出所有从未被借阅过的书籍(按分类号计算)的书名、分类号、出版社、作者及馆藏册数。
5. 列出借书证号为‘95001’的读者所借阅过的、书名中含有‘数据库’的图书的书名、分类号、借阅次数,并按借阅次数进行排序(次数多的排列在前)。
6. 在执行借书及还书操作时,对数据库执行哪些操作?请写出这些操作的SQL语句
你好,我刚开始学Portal Starter Kit,我安装vbsdk时,到testing connection总是告诉我connecting failed。我已经装了.net framwork 和 SQL Server 2000。
为什么会出现这种状况?
谢谢
@levis
输入了正确的数据库用户名和密码了吗?如果用户名密码正确,请检查SQL Server 的配置属性中的安全性->身份验证项是否选择的是“SQL Server和windows”。
刚开始学start kits,看lz的文章受益菲浅
二十四画生
太棒了,真了不起。我刚刚接触Portal Starter Kit,是业余的,自己学起来很吃力,希望大虾指点。
@levis
打开查询分析器,输入自己的ip地址登录数据库成功后,就能用localhost登录了。
再装一次,testing connection就能成功了。你可以试试看
我现在也在看 asp.net starter kits 中的TT,看你写的文章,太佩服你了
呵呵 以后要来踩踩你的空间
对了 我只有TT 你可以把 starter kits 的五个安装文件打包发给我吗?
非常感谢 xiaomi1984@126.com