美文网首页
数据库设计

数据库设计

作者: 大猪厂 | 来源:发表于2018-04-10 22:54 被阅读0次

    一、数据库设计

    用户模块

    用户表 user.User

    用户ID、用户名、密码、邮箱、权限、激活
    继承自django的AbstractUser类,在settings.py中添加配置信息AUTH_USER_MODEL = 'users.User'

    地址表 users.Address

    地址ID、用户id(外键)、手机号、收件人、地址、邮编

    商品模块

    商品SKU表 goods.GoodsSKU

    商品SKU id、名字、简介、价格、单位、库存、类别ID(外键)、商品spu id(外键)、图片url:冗余字段:以控件缓时间,查询url就可以查询到这张图片,不需要再到数据库中查询、销量0:每次下订单+=1、上下架 -0/1

    商品SPU表 goods.Goods

    商品spu id、名字、详情

    商品类别表goods.GoodsCategory

    类别id、名字、logo、图片

    图片表 goods.GoodsInage

    图片ID、url、商品 sku id

    首页轮播商品表 IndexGoodsBanner

    id、图片、url、index

    首页分类商品表 IndexCategoryGoodsBanner

    id、商品 spu id、类别id、type = 1、index

    购物车模块

    redis存放购物车数据

    # redis 知识复习
    
    # 启动 redis server
    sudo service redis start
    
    # 停止 redis server
    sudo service redis stop
    
    # 重启 redis server
    sudo service redis restart
    
    # 进入redis shell
    redis-cli
    
    # 测试
    ping ---> 返回pang
    

    redis数据库没有名字,默认有16个,编号0-15,使用select1来切换数据库;

    redis是key-value类型的数据库,每一条数据都是一个键值对;

    redis的Key是字符串类型,不能重复;

    redis的value有五种类型:string、Hash、list、set、zset;

    # keys *
    type key
    del key
    exist key
    expire key seconds
    ttl key
    
    # string
    set key value
    get key
    
    # hash
    hset key field value
    hget key field
    
    # list
    lpush/rpush key value
    lrange key start stop
    
    # set
    sadd key member1 member2
    smembers key
    
    # zset
    zadd key score1 member1 score2 member2
    zrange key start stop
    zrangebyscore key min max
    
    

    redis 与 python交互

    from redis import *
    if __name__=='__main__':
        try:
            sr = StrictRedis()
            result = sr.set("key", "value")
            # 输出响应结果,如果添加成功则返回True,不成功则返回False
            print(result)
            result1 = sr.get("key")
            # 输出键的值,如果键不存在则返回None
            print(result1)
            result2 = sr.delete("key")
            # 输出响应结果,如果成功则返回受影响的键数,如果不成功则返回0
            print(result2)
            key_list = sr.keys()
            # 返回所有键组成的列表
            print(key_list)
        except Exception as e:
            print(e)
    

    订单模块

    订单数据表OrderInfo

    order_id(自增)、订单id、数量*、价格(总价)、用户id、时间、地址id、付款方式、邮费、状态

    订单商品表 OrderGoods

    id、order_id、sku_id、数量、历史单价、价格(总价)、评论

    基类

    BaseModel中包含两个通用字段

    from django.db import models
    class BaseModel(models.Model):
        """为模型类补充字段"""
        create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
        # verbose_name: admin站点显示的名字
        update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
        class Meta:
            abstract = True  # 说明是抽象模型类
    
    

    数据库的主从

    mysql数据库主从服务器的通信是基于二进制的日志文件bin.log
    master做出动作,通过bin.log传入slave

    数据库的配置

    主从服务器配置

    DATABASES = {
        'default':{
            'ENGINE':'django.db.backends.mysql',
            'NAME':'dailyfresh',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'USER':'root',
            'PASSWORD':'mysql'
        },
        'slave':{
            'ENGINE':'django.db.backends.mysql',
            'NAME':'dailyfresh',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'USER':'root',
            'PASSWORD':'mysql'
        }
    }
    

    数据库路由配置

    配置完成主从数据库服务器之后,为了让django服务器能都分别调用这两个服务器,需要配置分离路由器

    # /util/db_router.py
    
    class MasterSlaveDBRouter(object):
        def db_for_read(self, model, **hints):
            return "slave"
        def db_for_write(self, model, **hints):
            return "default"
        def allow_relation(self, obj1, obj2, **hints):
            return True
    

    使用分离路由器,在配置文件settings.py中添加配置:

    DATABASE_ROUTERS = ['utils.db_router.MasterSlaveDBRouter']
    

    导入mysql

    # __init__.py
    
    import pymysql
    pymysql.install_as_MySQLdb()
    

    安装应用

    在配置文件settings中安装应用

    import sys
    sys.path.insert(1,os.path.join(BASE_DIR,'apps'))
    # Application definition
    
    INSTALLED_APPS = (
        ...
        'haystack',
        'users',
        'goods',
        'orders',
        'cart',
        )
    

    MysQL知识复习

    RDBMS:关系型数据库管理系统,关系模型,用二维表存储数据;
    关系型:每一行纪录都拥有相同的字段,多个表有关联的关系,一个表的某一列引用另一张表的数据;
    MySQL特点:支持多种操作系统,开源免费;
    SQL语言:SQL是一种特殊的语言,专门用来操作关系型数据库,不区分大小写;

    mysql -uroot -pmysql
    quit/exit/ctra+d
    
    # 默认四个数据库:
    information
    mysql
    performance
    sys
    
    # 数据完整性
    数据类型:数值类型(int)、字符串、小数;
    
    # 约束
    非空 not null
    唯一 unique
    默认 default
    主键 primary key
    外键 foreign key
    
    show databases;
    use mysql;
    select database();
    create database python charset=utf-8;
    drop database python;
    show tables;
    desc hero;
    create table stu(
        id int primary key not null auto_increment,
        name varchar(10)
        );
    alter table stu add aged int;
    alter table stu change aged age int;
    alter table stu modify age varchar;
    alter table stu drop age;
    select * from hero;
    insert into hero value
    

    相关文章

      网友评论

          本文标题:数据库设计

          本文链接:https://www.haomeiwen.com/subject/mixohftx.html