经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧

  首先我们要清楚,表设计的代码是写在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)--数据库表设计的更多相关文章

  1. Oracle数据库表设计时的注意事项

    表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...

  2. Innodb IO优化 — 数据库表设计 转

    数据库表设计这块学问比较多,我这里单从互联网角度出发同时结合Innodb的特性给出一些设计方法供大家参考.本文构建大概分两分部分:Innodb的特性及设计中如何利用这种特性. Innodb特性: In ...

  3. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  4. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  5. 抽屉之Tornado实战(2)--数据库表设计

    经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧 首先我们要清楚,表设计的代码是写在models下的 用户表 #一张表对应一个类 class ...

  6. ERP开发分享 1 数据库表设计

    这是我的ERP设计经验分享系列,今天讲的是数据库的表设计(1),主要阐述: 1.单字段的主键:2.使用int32作为主键类型:3.使用版本字段处理乐观锁定:4.生效字段标明是否允许“被使用”:5.锁定 ...

  7. Acitiviti数据库表设计(学习笔记)

    ACT_ID_*:与权限,用户与用户组,以及用户与用户组关系相关的表 ACT_RU_*:代表了流程引擎运行时的库表,RU表示Runtime ACT_HI_*:HI表示History当流程完成了节点以后 ...

  8. 测试用数据库表设计和SessionFactory

    本篇为struts-2.5.2和spring-3.2.0以及hibernate-4.2.21的整合开篇. 一.测试的数据库表. 用户.角色和权限关系表.数据库是Mysql5.6.为了考虑到一些特殊数据 ...

  9. 海量数据GPS定位数据库表设计

    在开发工业系统的数据采集功能相关的系统时,由于数据都是定时上传的,如每20秒上传一次的时间序列数据,这些数据在经过处理和计算后,变成了与时间轴有关的历史数据(与股票数据相似,如下图的车辆行驶过程中的油 ...

随机推荐

  1. lucene搜索之facet查询原理和facet查询实例——TODO

    转自:http://www.lai18.com/content/7084969.html Facet说明 我们在浏览网站的时候,经常会遇到按某一类条件查询的情况,这种情况尤以电商网站最多,以天猫商城为 ...

  2. LeetCode OJ:Unique Binary Search Trees(唯一二叉搜索树)

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  3. 整理下PC和移动获取点击、移动坐标的代码和坑

    一.PC PC是通过鼠标点击和移动,相对比较简单,比如onmousedown.onmouseup.onmousemove.onmouseout鼠标按键按下.按键起来.鼠标在元素上移动.鼠标从元素上离开 ...

  4. SQL使用指南(2)—— 约束的使用

    主键约束 (1)创建表时添加主键约束 primary key<column_name> (2) 修改表时添加主键约束 ALTER TABLE table_name ADD CONSTRAI ...

  5. WIN10更新后出现无法联网的问题

    以管理员身份运行CMD,运行以下命令: netsh winsock reset 具体可参考如下文章: http://www.sohu.com/a/124870273_490596 https://ji ...

  6. Android Studio 学习 - Activity生命周期

    落下两晚了,继续学习…… 先粘贴2张官方给的流程图: ------------------------------------------------------------------------- ...

  7. 2016 ACM-ICPC 区域赛(大连站)题解

    题目链接 A - Wrestling Match (二分图染色) 题意略坑(没有说好的玩家一定能打过差的玩家啊啊~~) 典型的二分图染色问题,每个玩家看成一个点,把相互较量过的玩家之间连边,好的玩家染 ...

  8. server2012/win8 卸载.net framework 4.5后 无法进入系统桌面故障解决【转】

    都重装过一次了,第二次被坑了,真的是痛苦的经历 只剩下的cmd什么命令都不能执行啊,powershell也执行不了呀[网上都是说powershell切换的] 故障:服务器装的是windows2012 ...

  9. 增加虚拟机ubuntu的硬盘

    20150526更新验证日记: (1)首先在虚拟机中增加ubuntu的硬盘大小. (2)在ubuntu中使用Gparted软件对新的空间进行分配(傻瓜式) (3)不能直接将磁盘挂载到home下,只能先 ...

  10. Azure CLI的版本问题

    Azure支持多种管理方法.命令行方法有: PowerShell,PowerShell只能运行在Windows上 Azure CLI,而Azure CLI可以运行在Windows.MAC以及Linux ...