-- 角色表
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', '普通用户');


