仿京东项目——京西商城(数据库设计)

文章目录

  • 仿京东——京西商城
    • 数据库设计
      • 建立E-R图
      • 数据库表设计
        • 用户表
        • 用户地址表
        • 商品表
        • 订单表
        • 订单详情表
        • 评论表
        • 购物车表
        • 购物车项表
    • 编写models类
      • user/models.py
      • goods/models.py
      • comment/models,py
      • cart/models.py
      • order/models.py
      • 同步models到数据库
    • 上传到Gitee

仿京东——京西商城

数据库设计

主要实体有:

  • 用户

    • 用户ID:唯一标识用户的主键

    • 用户名:用户名

    • 用户邮箱:用户的电子邮箱地址

    • 用户手机号码:用户的联系电话

    • 用户密码:用户的登录密码

    • 用户注册时间:用户注册商城的时间

  • 用户地址

    • 用户地址ID:唯一标识用户地址的主键
    • 用户:关联到用户的ID
    • 收件人姓名
    • 收件人地址
    • 收件人电话
    • 收件人地区
  • 商品

    • 商品ID:唯一标识商品的主键
    • 商品类型:
    • 商品名称:商品的名称
    • 商品描述:商品的详细描述
    • 商品价格:商品的销售价格
    • 商品库存:商品的库存数量
    • 商品状态:商品的上架状态(如上架/下架)
    • 商品图片:商品的图片URL或路径
  • 订单

    • 订单ID:唯一标识订单的主键

    • 用户ID:关联到用户的ID

    • 订单状态:订单的当前状态(如待支付、已支付、已发货、已完成、已取消)

    • 订单总金额:订单的总价值

    • 订单下单时间:订单创建的时间

  • 订单详情

    • 详情ID:唯一标识订单详情的主键

    • 订单ID):关联到订单的ID

    • 商品ID:关联到商品的ID

    • 数量:订单中商品的数量

    • 单价:商品在订单中的销售价格

  • 评论

    • 评论ID:唯一标识商品评论的主键

    • 用户ID:关联到用户的ID

    • 商品ID:关联到商品的ID

    • 评分:用户对商品的评分

    • 评论内容:用户对商品的评论内容

    • 评论时间:用户对商品的评论时间

  • 购物车

    • 购物车ID:购物车的唯一标识符

    • 用户ID:关联到创建购物车的用户的唯一标识符

    • 总价:购物车中所有商品的总价值

  • 购物车项

    1. 购物车项ID:购物车项的唯一标识符
    2. 购物车ID:关联到购物车的唯一标识符
    3. 商品ID:关联到商品的唯一标识符
    4. 数量:商品在购物车中的数量

建立E-R图

仿京东项目——京西商城(数据库设计)_第1张图片

数据库表设计

用户表
字段名称 类型 长度 约束类型
用户ID INT 12 PRIMARY KEY
用户名 VARCHAR 255 NOT NULL,UNIQUE
用户邮箱 VARCHAR 255 NOT NULL,UNIQUE
用户手机号码 VARCHAR 11 NOT NULL,UNIQUE
用户密码 VARCHAR 60 NOT NULL
用户注册时间 DATETIME DEFAULT CURRENT_TIMESTAMP
用户地址表
字段名称 类型 长度 约束类型
收件地址ID INT 12 PRIMARY KEY
用户 VARCHAR 255 NOT NULL,FOREIGN KEY
收件人姓名 VARCHAR 255 NOT NULL
收件地址 VARCHAR 11 NOT NULL
收件人手机号 VARCHAR 60 NOT NULL
地区 VARCHAR 255 NOT NULL
商品表
字段名称 类型 长度 约束类型
商品ID INT 12 PRIMARY KEY
商品名称 VARCHAR 255 NOT NULL,UNIQUE
商品描述 TEXT NOT NULL,UNIQUE
商品价格 DECIMAL (10, 2) NOT NULL
商品库存 INT 12 NOT NULL
商品图片 VARCHAR 255 NOT NULL
订单表
字段名称 类型 长度 约束类型
订单ID INT 12 PRIMARY KEY
用户ID INT 12 NOT NULL,FOREIGN KEY
订单状态 VARCHAR 50 NOT NULL
订单总金额 DECIMAL (10, 2) NOT NULL
订单下单时间 DATETIME DEFAULT CURRENT_TIMESTAMP
订单详情表
字段名称 类型 长度 约束类型
详情ID INT 12 PRIMARY KEY
订单ID INT 12 NOT NULL,FOREIGN KEY
商品ID INT 12 NOT NULL,FOREIGN KEY
数量 INT 12 NOT NULL
商品单价 DECIMAL (10, 2) NOT NULL
评论表
字段名称 类型 长度 约束类型
评论ID INT 12 PRIMARY KEY
用户ID INT 12 NOT NULL,FOREIGN KEY
商品ID INT 12 NOT NULL,FOREIGN KEY
评分 DECIMAL (3, 1) NOT NULL,CHECK(评分 >= 1.0 AND 评分 <= 10.0)
评论内容 VARCHAR 255 NOT NULL
评论时间 DATETIME DEFAULT CURRENT_TIMESTAMP
购物车表
字段名称 类型 长度 约束类型
购物车ID INT 12 PRIMARY KEY
用户ID INT 12 NOT NULL,FOREIGN KEY
总价 INT 12 NOT NULL
购物车项表
字段名称 类型 长度 约束类型
购物车项ID INT 12 PRIMARY KEY
购物车ID INT 12 NOT NULL,FOREIGN KEY
商品ID INT 12 NOT NULL,FOREIGN KEY
数量 INT 12 NOT NULL

编写models类

user/models.py

from django.db import models

class User(models.Model):
    user_id = models.AutoField(primary_key=True, unique=True, verbose_name="用户ID")
    name = models.CharField(max_length=255, unique=True, null=False, verbose_name='用户名')
    gender = models.CharField(max_length=255, null=False, verbose_name='用户性别')
    email = models.EmailField(max_length=255, unique=True, null=False, verbose_name='用户邮箱')
    mobile = models.CharField(max_length=11, unique=True, null=False, verbose_name='用户手机号码')
    password = models.CharField(max_length=60, null=False, verbose_name='用户密码')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='用户注册时间')

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'user'

class UserAddress(models.Model):
    user_address_id = models.AutoField(primary_key=True, unique=True, verbose_name="收件地址ID")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address', verbose_name="用户")
    recipient_name = models.CharField(max_length=255, unique=True, null=False, verbose_name='收件人姓名')
    recipient_address = models.CharField(max_length=255, null=False, verbose_name='收件地址')
    recipient_mobile = models.CharField(max_length=11, null=False, verbose_name='收件人手机号')
    district = models.CharField(max_length=255, null=False, verbose_name='地区')

    def __str__(self):
        return f"{self.recipient_name} - {self.recipient_address} - {self.recipient_mobile}"

    class Meta:
        db_table = 'user_address'

goods/models.py

from django.db import models

class Goods(models.Model):
    good_id = models.AutoField(primary_key=True, unique=True, verbose_name="商品ID")
    type_id = models.IntegerField(default=1, null=False, verbose_name="商品类型ID")
    name = models.CharField(max_length=255, unique=True, null=False, verbose_name='商品名称')
    detail = models.CharField(max_length=255, unique=True, null=False, verbose_name='商品描述')
    price = models.DecimalField(max_digits=10, decimal_places=2, null=False, verbose_name='商品价格')
    stock = models.IntegerField(max_length=20, null=False, verbose_name='商品库存')
    photo_URL = models.CharField(max_length=255, null=False, verbose_name='商品图片路径')

    def __str__(self):
        return f"{self.name} - {self.detail}"

    class Meta:
        db_table = 'goods'

comment/models,py

from django.db import models
from apps.goods.models import Goods
from apps.user.models import User

class Comment(models.Model):
    comment_id = models.AutoField(primary_key=True, unique=True, verbose_name="评论ID")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comment')
    goods = models.ForeignKey(Goods, on_delete=models.CASCADE, related_name='comment')
    score = models.IntegerField(null=False, default=0, verbose_name="评分")
    content = models.TextField(verbose_name="评论内容")
    comment_time = models.DateTimeField(auto_now_add=True, verbose_name='评论时间')

    def __str__(self):
        return f'{self.user.name} - {self.content[:5]}'

    class Meta:
        db_table = 'comment'

cart/models.py

from django.db import models
from apps.goods.models import Goods
from apps.user.models import User

class Cart(models.Model):
    cart_id = models.AutoField(primary_key=True, unique=True, verbose_name="购物车ID")
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="购物车总价")

    def __str__(self):
        return f'{self.user.name} - {self.total_price}'

    class Meta:
        db_table = 'cart'

class CartItem(models.Model):
    cart_item_id = models.AutoField(primary_key=True, unique=True, verbose_name="购物车项ID")
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='item', verbose_name="购物车")
    good = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name='商品')
    num = models.IntegerField(default=0, verbose_name='数量')

    def __str__(self):
        return f'{self.good.name} - {self.num}'

    class Meta:
        db_table = 'cart_item'

order/models.py

from django.db import models
from apps.goods.models import Goods
from apps.user.models import User

class Order(models.Model):
    order_id = models.AutoField(primary_key=True, unique=True, verbose_name="订单号")
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    status = models.IntegerField(default=0, verbose_name="订单状态")
    total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="订单总金额")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='订单创建时间')

    def __str__(self):
        return f'{self.user.name} - {self.total_price}'

    class Meta:
        db_table = 'order'

class OrderDetail(models.Model):
    order_detail_id = models.AutoField(primary_key=True, unique=True, verbose_name="订单详情ID")
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='detail', verbose_name='订单')
    goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name='商品')
    num = models.IntegerField(default=0, verbose_name="商品数量")
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品单价")

    def __str__(self):
        return f'{self.goods.name} - {self.price}'

同步models到数据库

python manage.py makemigrations
python manage.py migrate

仿京东项目——京西商城(数据库设计)_第2张图片

上传到Gitee

  1. 在Gitee创建一个远程仓库(jingxi_shop_project)
  2. 在项目文件夹中初始化一个本地仓库
git init
  1. 将文件添加到暂存区
git add .
  1. 提交更改,将更改同步到本地仓库
git commit -m "京西商城项目的创建以及models类的编写"
  1. 为本地仓库添加远程仓库
git remote add origin 远程仓库地址
  1. 推送到远程仓库
git push -u origin "master"

gitee链接:jignxi_shop_project: 个人开发的模仿京东商城的前后端分离项目——京西商城,后端使用django+django-rest-framework,前端使用 vue+ElementUI (gitee.com)

本人也处于学习阶段,若有错误与不足请指出,关注DPT一起进步吧!!!

你可能感兴趣的:(数据库,mysql,gitee,django)