Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

YiiFrameworkBlog开发向导:总体设计

Posted on 2010-02-24 21:39  analyzer  阅读(476)  评论(0编辑  收藏  举报

通过以上分析,我们认为需要建四个表来存储用户、文章、评论和tag

  • 用户表(User) 保存用户信息 包括用户名和密码
  • 文章表(Post) 保存文章的信息。主要包括以下内容
    1. 标题(title):必须。
    2. 内容(content):必须。使用Markdown 格式
    3. 状态(status):必须。可以是一下个是之一 草稿、发布、存档
    4. tags(tags):可选,文章的tags以逗号分割。
  • 评论表(Comment):存储评论信息,每一个评论都关联一个文章表,并包含以下信息
    1. 姓名(name)    必须 。评论者的名字
    2. 邮箱 (email)   必须
    3. 网址 (website) 可选。评论者的网站地址
    4. 内容(content)   必须。评论的内容使用Markdown 格式
    5. 状态(status)    必须。评论的状态来标记该评论是否被批准 1 or 0
  • tag表:保存文章tag的信息。每篇文章可能有多个tag,每个tag也可能被多篇文章使用。

 基于以上分析,我们绘制了这样的ER图,图中添加了PostTag表,来将一个多对多关系分成了两个一对多关系

完整的sql语句可以在演示程序的blog中找到。在我们安装的Yii框架中它保存在/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql。参考如下

 
  1. CREATE TABLE User
  2. (
  3.     id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  4.     username VARCHAR(128) NOT NULL,
  5.     password VARCHAR(128) NOT NULL,
  6.     email VARCHAR(128) NOT NULL,
  7.     profile TEXT
  8. );
  9.  
  10. CREATE TABLE Post
  11. (
  12.     id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  13.     title VARCHAR(128) NOT NULL,
  14.     content TEXT NOT NULL,
  15.     contentDisplay TEXT,
  16.     tags TEXT,
  17.     status INTEGER NOT NULL,
  18.     createTime INTEGER,
  19.     updateTime INTEGER,
  20.     commentCount INTEGER DEFAULT 0,
  21.     authorId INTEGER NOT NULL,
  22.     CONSTRAINT FK_post_author FOREIGN KEY (authorId)
  23.         REFERENCES User (id) ON DELETE CASCADE ON UPDATE RESTRICT
  24. );
  25.  
  26. CREATE TABLE Comment
  27. (
  28.     id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  29.     content TEXT NOT NULL,
  30.     contentDisplay TEXT,
  31.     status INTEGER NOT NULL,
  32.     createTime INTEGER,
  33.     author VARCHAR(128) NOT NULL,
  34.     email VARCHAR(128) NOT NULL,
  35.     url VARCHAR(128),
  36.     postId INTEGER NOT NULL,
  37.     CONSTRAINT FK_comment_post FOREIGN KEY (postId)
  38.         REFERENCES Post (id) ON DELETE CASCADE ON UPDATE RESTRICT
  39. );
  40.  
  41. CREATE TABLE Tag
  42. (
  43.     id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  44.     name VARCHAR(128) NOT NULL
  45. );
  46.  
  47. CREATE TABLE PostTag
  48. (
  49.     postId INTEGER NOT NULL,
  50.     tagId INTEGER NOT NULL,
  51.     PRIMARY KEY (postId, tagId),
  52.     CONSTRAINT FK_post FOREIGN KEY (postId)
  53.         REFERENCES Post (id) ON DELETE CASCADE ON UPDATE RESTRICT,
  54.     CONSTRAINT FK_tag FOREIGN KEY (tagId)
  55.         REFERENCES Tag (id) ON DELETE CASCADE ON UPDATE RESTRICT
  56. );
  57.  
  58. INSERT INTO User (username, password, email) VALUES ('demo','fe01ce2a7fbac8fafaed7c982a04e229','webmaster@example.com');
  59. INSERT INTO Post (title, content, contentDisplay, status, createTime, updateTime, authorId, tags) VALUES ('Welcome to Yii Blog','This blog system is developed using Yii. It is meant to demonstrate how to use Yii to build a complete real-world application. Complete source code may be found in the Yii releases.
  60.  
  61. Feel free to try this system by writing new posts and posting comments.','<p>This blog system is developed using Yii. It is meant to demonstrate how to use Yii to build a complete real-world application. Complete source code may be found in the Yii releases.</p>
  62.  
  63. <p>Feel free to try this system by writing new posts and posting comments.</p>',1,1230952187,1230952187,1,'yii, blog');
  64.  
  65.  
  66. INSERT INTO Tag (nameVALUES ('yii');
  67. INSERT INTO Tag (nameVALUES ('blog');
  68.  
  69. INSERT INTO PostTag (postId, tagId) VALUES (1,1);
  70. INSERT INTO PostTag (postId, tagId) VALUES (1,2);

 

我们可把blog的开发分为以下5个阶段

  •  建立一个系统的原型,包括一些基本的功能。
  •  完善对文章的管理,包括新建、列表、显示、更新和删除文章。
  •  完善对评论的管理,包括添加、列表、批准、更新和删除评论
  •  实现portlets ,包括用户菜单 登陆 tag列表和 评论列表
  •  调试部署。

原文参看www.yiiframework.com/doc/blog/start.design

我要啦免费统计