Tornado之抽屉实战(2)--数据库表设计
经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧
首先我们要清楚,表设计的代码是写在models下的
用户表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#一张表对应一个类class UserInfo(Base): #把表名赋给静态字段 __tablename__ = 'userinfo' #序号nid,用户名username,密码password,邮箱email,创建时间ctime #一行数据就是一个对象 nid = Column(Integer, primary_key=True, autoincrement=True) username = Column(String(32)) password = Column(String(32)) email = Column(String(32)) ctime = Column(TIMESTAMP) #建立组合索引,这里是方便在登陆采用不同的登陆方式也能更好的索引数据库 #用户名+密码 和 邮箱+密码 两种组合索引 __table_args__ = ( Index('ix_user_pwd', 'username', 'password'), Index('ix_email_pwd', 'email', 'password'), ) |
信息类型表
|
1
2
3
4
5
6
|
class NewsType(Base): __tablename__ = 'newstype' nid = Column(Integer, primary_key=True, autoincrement=True) caption = Column(String(32)) |
信息表
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class News(Base): __tablename__ = 'news' nid = Column(Integer, primary_key=True, autoincrement=True) #建立外键---两个 user_info_id = Column(Integer, ForeignKey("userinfo.nid")) news_type_id = Column(Integer, ForeignKey("newstype.nid")) ctime = Column(TIMESTAMP) title = Column(String(32)) url = Column(String(128)) content = Column(String(150)) |
点赞表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Favor(Base): #点赞表 __tablename__ = 'favor' nid = Column(Integer, primary_key=True, autoincrement=True) #点赞者id user_info_id = Column(Integer, ForeignKey("userinfo.nid")) #信息id news_id = Column(Integer, ForeignKey("news.nid")) ctime = Column(TIMESTAMP) #建立联合唯一索引 __table_args__ = ( UniqueConstraint('user_info_id', 'news_id', name='uix_uid_nid'), ) |
评论表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Comment(Base): __tablename__ = 'comment' nid = Column(Integer, primary_key=True, autoincrement=True) #评论者id user_info_id = Column(Integer, ForeignKey("userinfo.nid")) #评论的信息id news_id = Column(Integer, ForeignKey("news.nid")) #如果为None,就是评论文章,如果是数字就是回复某个人 reply_id = Column(Integer, ForeignKey("comment.nid"), nullable=True, default=None) #顶一下 up = Column(Integer) #踩一下 down = Column(Integer) #创建时间 ctime = Column(TIMESTAMP) #发表设备:手机,电脑,苹果.... device = Column(String(32)) #发表内容 content = Column(String(150)) |
Tornado之抽屉实战(2)--数据库表设计的更多相关文章
- Oracle数据库表设计时的注意事项
表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...
- Innodb IO优化 — 数据库表设计 转
数据库表设计这块学问比较多,我这里单从互联网角度出发同时结合Innodb的特性给出一些设计方法供大家参考.本文构建大概分两分部分:Innodb的特性及设计中如何利用这种特性. Innodb特性: In ...
- springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- 抽屉之Tornado实战(2)--数据库表设计
经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧 首先我们要清楚,表设计的代码是写在models下的 用户表 #一张表对应一个类 class ...
- ERP开发分享 1 数据库表设计
这是我的ERP设计经验分享系列,今天讲的是数据库的表设计(1),主要阐述: 1.单字段的主键:2.使用int32作为主键类型:3.使用版本字段处理乐观锁定:4.生效字段标明是否允许“被使用”:5.锁定 ...
- Acitiviti数据库表设计(学习笔记)
ACT_ID_*:与权限,用户与用户组,以及用户与用户组关系相关的表 ACT_RU_*:代表了流程引擎运行时的库表,RU表示Runtime ACT_HI_*:HI表示History当流程完成了节点以后 ...
- 测试用数据库表设计和SessionFactory
本篇为struts-2.5.2和spring-3.2.0以及hibernate-4.2.21的整合开篇. 一.测试的数据库表. 用户.角色和权限关系表.数据库是Mysql5.6.为了考虑到一些特殊数据 ...
- 海量数据GPS定位数据库表设计
在开发工业系统的数据采集功能相关的系统时,由于数据都是定时上传的,如每20秒上传一次的时间序列数据,这些数据在经过处理和计算后,变成了与时间轴有关的历史数据(与股票数据相似,如下图的车辆行驶过程中的油 ...
随机推荐
- Postman工具——Pre-Request Script、Tests
这篇是介绍 Postman 的最后一篇,也就是最后两个用法:Pre-Request Script 和 Tests ,它支持以嵌入脚本的方式动态准备测试数据,并根据业务需求设计测试用例. 一.Pre-R ...
- Nodejs调试技术总结
调试技术与开发技术构成了软件开发的基石.目前Nodejs作为新型的Web Server开发栈倍受开发者关注.总的来说Nodejs的应用程序主要有两部分:JavaScript编写的js模块和C语言编译的 ...
- android不同的按钮一起点击崩溃解决
public class ButtonUtils { private static long lastClickTime; public synchronized static boolean isF ...
- 非root用户 如何将cscope安装到指定目录,vim74安装
随着Linux的普及,使用Linux进行软件开发的人也越来越多.而大多数公司都采用这种方式:提供一台高性能的中央服务器做为开发编译服务器,每个人登录这台服务器进行开发编译.在这种情况下,用户通常没有r ...
- UVA - 1601 The Morning after Halloween (BFS/双向BFS/A*)
题目链接 挺有意思但是代码巨恶心的一道最短路搜索题. 因为图中的结点太多,应当首先考虑把隐式图转化成显式图,即对地图中可以相互连通的点之间连边,建立一个新图(由于每步不需要每个鬼都移动,所以每个点需要 ...
- Brackets Sequence(升级版)
个人心得:又是途径问题,我怕是又炸了.看了题解他的意思就是找出最短的添加顺序的断点,则只要 根据断点添加就好了,注意递归的奥妙之处吧,暂时还真得是拿他没办法. 题目描述: 定义合法的括号序列如下: 1 ...
- [转]angular之$apply()方法
这几天,根据buddy指定的任务,要分享一点angular JS的东西.对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的阻力还真是不少.不 ...
- bzoj 3505 [Cqoi2014]数三角形——排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的g ...
- Gradle的快速入门
1.基础知识: Gradle提供了:构建项目的框架.但是其中起作用的是Plugin. Gradle在默认情况下提供了很多常用的Plugin.例如:构建Java的Plugin.还有war.Ear等. G ...
- Python内置函数:strip()
文章转载于:http://www.cnblogs.com/itdyb/p/5046472.html(博主:波比12) 在python API中这样解释strip()函数: