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秒上传一次的时间序列数据,这些数据在经过处理和计算后,变成了与时间轴有关的历史数据(与股票数据相似,如下图的车辆行驶过程中的油 ...
随机推荐
- unity脚本生命流程
渲染 OnPreCull: 在相机剔除场景之前调用此函数.相机可见的对象取决于剔除.OnPreCull 函数调用发生在剔除之前. OnBecameVisible/OnBecameInvisible: ...
- DH01-简单工厂模式
模式简介 简单工厂模式又称静态工厂方法模式,定义一个用于创建对象的接口.其主要组成部分为: 工厂类角色:模式的核心,具有一定的商业逻辑和判断逻辑.如示例中的类AnimalSpecies 抽象产品角色: ...
- sql print
这个因为你使用了varchar+int ,但是print只支持一种类型的输出,你要么通过转换函数将@no转换成字符类型,要么去掉@name.print '李勇' + convert(varchar, ...
- 总结一下内核DEBUG中的dump_stack, BUG, BUG_ON以及panic
有点空闲时间,让我们来总结一下内核DEBUG中的各个语句吧.随便找个内核驱动,在init函数里面加入如下代码测试: u8 a = 1, b = 0; printk("----------du ...
- 微服务:Eureka配置集群环境
一.注册中心编码 1.使用idea创建一个spring boot项目,pom如下: <?xml version="1.0" encoding="UTF-8" ...
- Leetcode 904. Fruit Into Baskets
sliding window(滑动窗口)算法 class Solution(object): def totalFruit(self, tree): """ :type ...
- CodeForces - 150C :Smart Cheater (线段树,求最大连续区间)
I guess there's not much point in reminding you that Nvodsk winters aren't exactly hot. That increas ...
- 《Javascript高级程序设计》阅读记录(三):第五章 上
这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 这个系列,我会把阅读< ...
- 清理svn.bat
@echo on color 2f mode con: cols=80 lines=25 @REM @echo 正在清理SVN文件,请稍候...... @rem 循环删除当前目录及子目录下 ...
- python中lxml的应用
首先下载lxml, http://www.lfd.uci.edu/~gohlke/pythonlibs/ ,然后添加引用 from lxml import _elementpath as DONTUS ...