抽屉之Tornado实战--数据库表设计

Posted zcok168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽屉之Tornado实战--数据库表设计相关的知识,希望对你有一定的参考价值。

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

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

用户表

#一张表对应一个类
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),
    )

信息类型表

class NewsType(Base):
 
    __tablename__ = newstype
 
    nid = Column(Integer, primary_key=True, autoincrement=True)
    caption = Column(String(32))

信息表

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))
 

点赞表

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),
    )

评论表

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实战--数据库表设计的主要内容,如果未能解决你的问题,请参考以下文章

Tornado实战

抽屉之Tornado实战--点赞与评论树

抽屉之Tornado实战--发帖及上传图片

抽屉之Tornado实战--form表单验证

抽屉之Tornado实战--装饰器实现用户登录状态验证

抽屉之Tornado实战--session工厂(工厂方法模式)