-- 角色表 CREATE TABLE `roles` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `role_name` VARCHAR(32) NOT NULL UNIQUE, `description` VARCHAR(128) ); -- 用户表 CREATE TABLE `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(64) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `email` VARCHAR(128) UNIQUE, `phone` VARCHAR(20) UNIQUE, `nickname` VARCHAR(64), `status` TINYINT DEFAULT 1, `role_id` INT NOT NULL DEFAULT 2, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ); -- ---------------------------- -- Table structure for permissions -- ---------------------------- -- 这是权限表,用于存储系统中所有可分配的权限 -- id: 权限的唯一标识符,自增主键 -- code: 权限的唯一代码,用于程序中进行权限验证,如'manage_books'、'view_users'等 -- name: 权限的显示名称,便于管理员理解,如'管理图书'、'查看用户'等 -- description: 权限的详细描述,解释该权限允许用户执行什么操作 DROP TABLE IF EXISTS `permissions`; CREATE TABLE `permissions` ( `id` int NOT NULL AUTO_INCREMENT, `code` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限代码,用于系统识别', `name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限名称,用于界面显示', `description` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '权限描述,说明权限用途', PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`) COMMENT '权限代码必须唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统权限表'; -- ---------------------------- -- Table structure for role_permissions -- ---------------------------- -- 这是角色-权限关联表,用于建立角色和权限之间的多对多关系 -- role_id: 角色ID,外键关联到roles表 -- permission_id: 权限ID,外键关联到permissions表 -- created_at: 记录权限分配给角色的时间 -- 该表使用role_id和permission_id的组合作为复合主键,确保一个角色不会重复分配同一权限 DROP TABLE IF EXISTS `role_permissions`; CREATE TABLE `role_permissions` ( `role_id` int NOT NULL COMMENT '角色ID,关联roles表的id字段', `permission_id` int NOT NULL COMMENT '权限ID,关联permissions表的id字段', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '权限分配时间', PRIMARY KEY (`role_id`,`permission_id`), -- 复合主键,确保一个角色不会重复分配同一权限 KEY `permission_id` (`permission_id`), -- 权限ID索引,提高查询效率 CONSTRAINT `role_permissions_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE, CONSTRAINT `role_permissions_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色-权限关联表'; -- (可选)初始化角色数据 INSERT INTO `roles` (`role_name`, `description`) VALUES ('admin', '管理员'), ('user', '普通用户');