数据库表设计
介绍
Mineadmin具有强大的自动生成前后端代码功能,后台功能工具->代码生成器
。
为了方便使用和配置自动生成器,我们设计了一套表备注来帮助生成代码
主键设计选择
雪花ID主键 Snowflake
雪花ID,使用的hyperf官方提供的包,具体算法设计模式可以查看链接 非自增ID,mineadmin就会自动维护生成
`id` bigint(20) NOT NULL
为什么使用雪花ID,使用雪花ID有什么好处
使用雪花算法生成ID的好处包括: 全局唯一性,高性能,趋势递增,分布式
一个案例来说明在开发中使用雪花ID的好处,这个案例我们可以看出,使用雪花ID我们并不需要担心在代码逻辑中批量生成ID时候,ID重复的情况,也就是说我们在开发中,只需要关系数据的写入时候ID是否关联上,这是自增ID很难做到的点。
// 生成订单数据
function generateOrders($count) {
$orders = [];
for ($i = 0; $i < $count; $i++) {
$order = [
'id' => snowflake_id(), // 使用雪花算法生成唯一ID
'user_id' => mt_rand(1, 100), // 假设用户ID在1到100之间
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
$orders[] = $order;
}
return $orders;
}
// 生成订单商品数据
function generateOrderItems($order_id, $count) {
$orderItems = [];
for ($i = 0; $i < $count; $i++) {
$orderItem = [
'id' => snowflake_id(),
'order_id' => $order_id,
'product_id' => mt_rand(1, 50), // 假设商品ID在1到50之间
'quantity' => mt_rand(1, 5),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
$orderItems[] = $orderItem;
}
return $orderItems;
}
// 一次性生成并插入订单数据和订单商品数据
$count = 10; // 假设要插入10个订单
$orders = generateOrders($count);
$orderItems = [];
foreach ($orders as $order) {
$orderItems = array_merge($orderItems, generateOrderItems($order['id'], mt_rand(1, 3))); // 每个订单插入1到3个商品
}
Db::transaction(function () use ($orders, $orderItems) {
Db::table('orders')->insert($orders);
Db::table('order_items')->insert($orderItems);
});
自增主键
数据库自带的自增ID
`id` bigint(20) NOT NULL AUTO_INCREMENT
表字段类型设置以及字段备注
字段名
字段名 | 例如 | 输入框类型 |
---|---|---|
image | mine_image | 单图片上传 |
images | mine_images | 多图片上传 |
file | mine_file | 单文件上传 |
files | mine_files | 多文件上传 |
字段数据类型
字段类型 | 搜索标识符 | 输入框类型 | 表备注 |
---|---|---|---|
tinyint、int、bigint | eq | 数字输入框、选择输入框 | 类型:1=类型1,2=类型2 |
varchar | like | 文本输入框 | |
text、longtext | no | 富文本 | |
timestamp、datetime | between | 日期时间组件 | |
date | between | 日期组件 | |
json | no | 无 |
示例DDL
CREATE TABLE `print_test` (
`id` bigint(20) NOT NULL,
`type` tinyint(4) NOT NULL COMMENT '类型:1=是,0=否',
`conetnt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '富文本',
`image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图片上传',
`file` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件上传',
`images` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '多图片上传',
`files` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '多文件上传',
`datetime` datetime NULL DEFAULT NULL COMMENT '日期时间',
`date` date NULL DEFAULT NULL COMMENT '日期',
`user_id` int(10) NULL DEFAULT NULL COMMENT '用户',
`json` json NULL COMMENT '数组',
PRIMARY KEY (`id`) USING BTREE,
INDEX `user_id_index`(`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试表' ROW_FORMAT = Dynamic;