码迷,mamicode.com
首页 > 其他好文 > 详细

CMS怎么设计?

时间:2015-03-30 18:39:48      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:cms   设计   

我们在做CMS往往会遇到这样的问题,内容类型有几个,这些内容大体上字段都差不多,只有一些字段不一样。
如新闻、通知公告(没有来源,多了通知对象)、旅游信息(这里客户可能要有个一费用的字段,方便检索)类似这样的内容类型。
往往我们会通过以下的方案进行处理:
1、将所有肯能用到的字段都设置到一个表中,这种方案有以下缺点
    a、不能很好的确保数据完整性,比如,A类型中的a字段是必须的,但在B类型中是没有的,为了添加数据不报错,必须把a字段设为可为空。
    b、数据碎片会变多,不知这种说法是否成立,类型不一样时感觉会生成很多空字段。
2、为每个类型定义不同的表,这种方案没什么可说的,就一个不好的地方,重复工作相对比较多。
3、将通用属性写入一个通用属性表中,将附加属性(不通用的属性),写入各自的附表中,这方案中和吧。
前面两种相信大家都能想得到,在这里我来讲讲方案三怎么实现。
这种方案的表结构大概涉及到这些表ContentItem,ContentTypeDefinitions,ContentTypeColumnDefinitions,addon_xxx表。这些表的作用及关键字段的说明如下:
ContentItem-内容表 这个表放在一些通用的字段
ContentTypeDefinitions 内容类型定义表(ctd表)-这个表存放内容类型,如新闻News,链接(Links)

ContentTypeId    int    Unchecked                        --主键没得说
ContentTypeName    nvarchar(64)    Unchecked            --名称(如新闻)
ContentTypeKey    varchar(64)    Unchecked                --类型Key(如News)
IsBuiltIn    tinyint    Unchecked                        --是否是内置
DisplayOrder    int    Unchecked                        --显示顺序
TableName    varchar(64)    Unchecked                    --存放这些属性的表的tablename
ForeignKey    varchar(64)    Unchecked                    --关联的外键(ContentItemId)
Page_New    varchar(128)    Unchecked                --新建页面的View
Page_Edit    varchar(128)    Unchecked                --编辑页面的View
Page_Manage    varchar(128)    Unchecked                --管理页面的
Page_Default_List    varchar(128)    Unchecked        --默认列表页
Page_Default_Detail    varchar(128)    Unchecked
ContentTypeColumnDefinitions 内容类型字段定义表(ctcd表) 定义附表中都有哪些的字段

ColumnId    int    Unchecked                        --
ContentTypeId    int    Unchecked                    --所属的内容类型ID
ColumnName    varchar(64)    Unchecked                --字段名称
ColumnLabel    nvarchar(128)    Unchecked            --字段显示名称
IsBuiltIn    tinyint    Unchecked                    --是否是内置
DataType    varchar(64)    Unchecked                --数据类型
Length    int    Unchecked                            --长度
Precision    varchar(64)    Unchecked                --精度
IsNotNull    tinyint    Unchecked
DefaultValue    nvarchar(64)    Unchecked
这种设计的原理是,把通用的内容属性放入ContentItem中,把附加属性(不通用的属性)放在各自的附表中(如news则放在addon_news表中)
这两者的关系通过ctd表与ctcd表中的定义进行关联,每次获取通用属性之后再根据内容类型获取相应的附加属性,将附加属性存入ContentItem类中的IDictionary<string, object> AdditionalProperties。

以上内容参考近乎的CMS这一块的设计。

CMS怎么设计?

标签:cms   设计   

原文地址:http://blog.csdn.net/weizengxun/article/details/44754699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!