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

  首先我们要清楚,表设计的代码是写在models下的

用户表

  1. #一张表对应一个类
  2. class UserInfo(Base):
  3. #把表名赋给静态字段
  4. __tablename__ = 'userinfo'
  5. #序号nid,用户名username,密码password,邮箱email,创建时间ctime
  6. #一行数据就是一个对象
  7. nid = Column(Integer, primary_key=True, autoincrement=True)
  8. username = Column(String(32))
  9. password = Column(String(32))
  10. email = Column(String(32))
  11. ctime = Column(TIMESTAMP)
  12.  
  13. #建立组合索引,这里是方便在登陆采用不同的登陆方式也能更好的索引数据库
  14. #用户名+密码 和 邮箱+密码 两种组合索引
  15. __table_args__ = (
  16. Index('ix_user_pwd', 'username', 'password'),
  17. Index('ix_email_pwd', 'email', 'password'),
  18. )

信息类型表

  1. class NewsType(Base):
  2.  
  3. __tablename__ = 'newstype'
  4.  
  5. nid = Column(Integer, primary_key=True, autoincrement=True)
  6. caption = Column(String(32))

信息表

  1. class News(Base):
  2.  
  3. __tablename__ = 'news'
  4.  
  5. nid = Column(Integer, primary_key=True, autoincrement=True)
  6. #建立外键---两个
  7. user_info_id = Column(Integer, ForeignKey("userinfo.nid"))
  8. news_type_id = Column(Integer, ForeignKey("newstype.nid"))
  9. ctime = Column(TIMESTAMP)
  10. title = Column(String(32))
  11. url = Column(String(128))
  12. content = Column(String(150))

点赞表

  1. class Favor(Base):
  2. #点赞表
  3. __tablename__ = 'favor'
  4.  
  5. nid = Column(Integer, primary_key=True, autoincrement=True)
  6. #点赞者id
  7. user_info_id = Column(Integer, ForeignKey("userinfo.nid"))
  8. #信息id
  9. news_id = Column(Integer, ForeignKey("news.nid"))
  10. ctime = Column(TIMESTAMP)
  11.  
  12. #建立联合唯一索引
  13. __table_args__ = (
  14. UniqueConstraint('user_info_id', 'news_id', name='uix_uid_nid'),
  15. )

评论表

  1. class Comment(Base):
  2.  
  3. __tablename__ = 'comment'
  4.  
  5. nid = Column(Integer, primary_key=True, autoincrement=True)
  6. #评论者id
  7. user_info_id = Column(Integer, ForeignKey("userinfo.nid"))
  8. #评论的信息id
  9. news_id = Column(Integer, ForeignKey("news.nid"))
  10. #如果为None,就是评论文章,如果是数字就是回复某个人
  11. reply_id = Column(Integer, ForeignKey("comment.nid"), nullable=True, default=None)
  12. #顶一下
  13. up = Column(Integer)
  14. #踩一下
  15. down = Column(Integer)
  16. #创建时间
  17. ctime = Column(TIMESTAMP)
  18. #发表设备:手机,电脑,苹果....
  19. device = Column(String(32))
  20. #发表内容
  21. content = Column(String(150))

抽屉之Tornado实战(2)--数据库表设计的更多相关文章

  1. 抽屉之Tornado实战(1)--分析与架构

    抽屉之Tornado实战(1)--分析与架构   项目模拟地址:http://dig.chouti.com/ 知识点应用: AJAX  用于偷偷发请求 原生ajax jQuery  ajax($.aj ...

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

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

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

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

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

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

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

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

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

    经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧 首先我们要清楚,表设计的代码是写在models下的 用户表 ? 1 2 3 4 5 6 7 ...

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

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

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

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

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

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

随机推荐

  1. Asp.Net WebApi swagger使用教程

    swagger简介 别名:丝袜哥 功能:用于生产api文档 swagger安装 Nuget搜索swagger,然后安装Swashbuckle swagger使用 生成api的xml文档 webapi项 ...

  2. spring aop 之xml

    1.类库 2.aop概念 一个切面可以有多个切点 3.在方法前后进行aop的测试代码 3.1aop.xml <beans xmlns="http://www.springframewo ...

  3. bootstrap 3.0 LESS源代码浅析(二)

    border-radius是最常见的CSS3属性,但你知道他多少东西呢? 比如: border-radius:2em; 相当于什么? border-top-left-radius:2em; borde ...

  4. 奇葩问题 eclipse中DDMS的LOGcat只有一列level

    http://stackoverflow.com/questions/25010393/eclipse-logcat-shows-only-the-first-letter-from-each-mes ...

  5. react实现多行文本超出加省略号

    http://www.css88.com/archives/5206 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; ...

  6. mybatis通用mapper源码解析(一)

    1.配置JavaBean与数据库表字段映射关系 /** * 字段转换方式 */ public enum Style { normal, //原值 camelhump, //驼峰转下划线 upperca ...

  7. post请求参数问题

    from:https://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样 ...

  8. Maven 学习 -- 目录

    1. Maven 学习-入门 2. Maven学习-目录结构 3. Maven学习-处理资源文件 啦啦啦

  9. 【Important】数据库索引原理

    为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入.修改.删除变慢? 什么情况下要同时在两个字段上建索引? 想理解索引原理必须清楚一种数据结构(平衡树非二叉)也就是b tre ...

  10. git 删除仓库的文件

    git移除远程仓库某个文件夹 1.比如src/product/ 文件夹 git rm -r --cached "src/product" //执行命令. 2.提交到本地 git c ...