我的毕业设计--数据库设计之登陆注册


登陆注册数据库设计

共同字段:

  • id

    主键,自增ID

用户表

tablename: user
字段名字段类型字段描述是否为空是否unique默认值
usernamestring(20)用户名FalseTrue
passwordstring(100)密码FalseFalse
emailstring(49)邮箱FalseTrue
is_superuserbool是否为超级管理员FalseFalseFalse
is_confirmedbool邮箱是否验证FalseFalseFalse
register_timedatetime注册时间FalseFalseUTC时间
last_logindatetime上次登陆TrueFalse

用户信息表

tablename: userinfo
字段名字段类型字段描述是否为空是否unique默认值
avatarstring(128)头像路径TrueFalse
companystring(128)公司TrueFalse
websitestring(128)网址TrueFalse
user_idinteger关联用户表外键TrueTrue
user与用户信息成一对一关系

用户设置表

tablename: usersetting
字段名字段类型字段描述是否为空是否unique默认值
localestring(49)语言设置FalseFalsezh
timezonestring(49)时区设置FalseFalseUTC
user_idinteger关联用户表外键TrueTrue
user与用户设置成一对一关系

用户token表

tablename: usertoken
字段名字段类型字段描述是否为空是否unique默认值
tokenstring(128)tokenFalseFalse
availablebooltoken是否有效FalseFalseTrue
created_atdatetimetoken创建时间FalseFalseUTC时间
updated_atdatetimetoken更新时间FalseFalseUTC时间(自动更新)
user_idinteger关联用户表外键TrueTrue
user与用户token成一对一关系

数据库实现

用户表

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column('用户名', db.String(49), unique=True, nullable=False)
    email = db.Column('邮箱', db.String(81), unique=True, nullable=False)
    password = db.Column('密码', db.String(81), nullable=False)
    is_superuser = db.Column('是否超级管理员', db.Boolean, default=False)
    is_confirmed = db.Column('是否验证', db.Boolean, default=False)
    register_time = db.Column('注册时间', db.DateTime, default=datetime.now())
    last_login = db.Column('上次登陆', db.DateTime, nullable=True)

用户信息表

class UserInfo(db.Model):
    __tablename__ = 'userinfo'
    id = db.Column(db.Integer, primary_key=True)
    avatar = db.Column(db.String(128))
    school = db.Column(db.String(128), nullable=True)
    word = db.Column(db.Text, nullable=True)
    introduce = db.Column(db.Text, nullable=True)

    user_id = db.Column(
        db.Integer, db.ForeignKey(
            'user.id', ondelete="CASCADE"))
    user = db.relationship(
        User,
        backref=db.backref(
            "info", uselist=False, cascade='all,delete', lazy='joined'),
        uselist=False,
        lazy='joined')

用户设置表

class UserSetting(db.Model):
    LOCALE_CHINESE = 'zh'
    LOCALE_ENGLISH = 'en'
    LOCALE = (('zh', 'Chinese'), ('en', 'English'))

    TIMEZONE_UTC = 'UTC'
    TIMEZONE = [(i, i) for i in all_timezones]

    __tablename__ = 'usersetting'
    id = db.Column(db.Integer, primary_key=True)
    locale = db.Column(db.String(32), nullable=False, default=LOCALE_CHINESE)
    timezone = db.Column(db.String(32), nullable=False, default=TIMEZONE_UTC)

    user_id = db.Column(
        db.Integer, db.ForeignKey(
            'user.id', ondelete="CASCADE"))
    user = db.relationship(
        User,
        backref=db.backref(
            "setting", uselist=False, cascade='all,delete', lazy='joined'),
        uselist=False,
        lazy='joined')

用户token表

class UserToken(db.Model):
    __tablename__ = 'usertoken'
    id = db.Column(db.Integer, primary_key=True)
    token = db.Column(db.String(128), nullable=False)
    available = db.Column(db.Boolean, nullable=False, default=True)
    created_at = db.Column(
        db.DateTime, default=datetime.utcnow(), nullable=False)
    updated_at = db.Column(
        db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())
    user_id = db.Column(
        db.Integer, db.ForeignKey(
            'user.id', ondelete="CASCADE"))
    user = db.relationship(
        User,
        backref=db.backref(
            "token", uselist=False, cascade='all,delete', lazy='joined'),
        uselist=False,
        lazy='joined')

以后可能对表进行扩展