MySQL--数据库表设计,如何建立外键列

MySQL

表设计

1 .1分析

  1. 一对一
    用户与购物车

  2. 一对多
    类型与商品 从商品看,一对一,一个 商品一个类型。从类型方看,一个类型下有很多商品。
    购物车与购物项 一个购物车有很多购物项
    购物项与商品 一个商品对应一个购物项

  3. 多对多
    学生与老师

1.2 创建表

CREATE TABLE `product` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '商品id',
  `prod_name` varchar(255) DEFAULT NULL,
  `prod_price` decimal(10,2) DEFAULT NULL,
  `prod_image` varchar(255) DEFAULT NULL,
  `prod_store` bigint DEFAULT NULL,
  `prod_status` int DEFAULT NULL COMMENT '商品状态  0 下架  1  在售  2 删除',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `sys_user` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `true_name` varchar(255) DEFAULT NULL,
  `nick_name` varchar(30) DEFAULT NULL,
  `age` tinyint unsigned DEFAULT NULL,
  `gender` tinyint(1) DEFAULT NULL,
  `phone` varchar(200) DEFAULT NULL,
  `user_image` varchar(255) DEFAULT NULL,
  `balance` decimal(30,4) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `cart` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '购物车id',
  `total_money` decimal(30,2) DEFAULT NULL COMMENT '总金额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `cart_item` (
  `id` int NOT NULL AUTO_INCREMENT,
  `buy_num` int DEFAULT NULL COMMENT '购买数量',
  `money` decimal(10,2) DEFAULT NULL COMMENT '小计',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `type` (
  `id` int NOT NULL AUTO_INCREMENT,
  `type_name` varchar(255) DEFAULT NULL COMMENT '类型名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

表关系

以上是我们创建的单表,没有考虑他们之间的关系。必然是存在很大的问题的。

需要良好的设计以上一些表,维护他们之间的关系。

需要使用外键列(新的列)维护。

1. 一对一

在这里插入图片描述

CREATE TABLE cart(
  id int  auto_increment,
	total_money DECIMAL(20,3) COMMENT '总金额',
	uid BIGINT(10) COMMENT '外键列,数据严格参照用户表的id数据',
	PRIMARY KEY(id)
);

2. 一对多

购物车与购物项

在这里插入图片描述

购物项与商品


在这里插入图片描述

商品与类型

在这里插入图片描述

类型与类型

在这里插入图片描述

3. 多对多

学生与老师

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拨云见日_c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值