init.sql 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. -- ============================================================
  2. -- 宿舍管理系统 - 数据库初始化脚本
  3. -- 数据库: dormitory_manage
  4. -- ============================================================
  5. CREATE DATABASE IF NOT EXISTS dormitory_manage DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  6. USE dormitory_manage;
  7. -- ============================================================
  8. -- 用户表
  9. -- ============================================================
  10. CREATE TABLE user (
  11. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  12. username VARCHAR(50) NOT NULL UNIQUE,
  13. password VARCHAR(255) NOT NULL,
  14. name VARCHAR(50) NOT NULL,
  15. gender TINYINT DEFAULT 0 COMMENT '0-女, 1-男',
  16. phone VARCHAR(20),
  17. role TINYINT NOT NULL DEFAULT 1 COMMENT '0-管理员, 1-学生',
  18. student_id VARCHAR(50) UNIQUE COMMENT '学号',
  19. avatar VARCHAR(255) COMMENT '头像路径',
  20. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  21. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
  23. -- ============================================================
  24. -- 宿舍楼表
  25. -- ============================================================
  26. CREATE TABLE dormitory_building (
  27. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  28. name VARCHAR(100) NOT NULL COMMENT '楼栋名称',
  29. code VARCHAR(20) COMMENT '楼栋编号',
  30. gender TINYINT DEFAULT 2 COMMENT '0-女, 1-男, 2-混合',
  31. floor_count INT DEFAULT 6 COMMENT '楼层数',
  32. description VARCHAR(500) COMMENT '备注',
  33. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  34. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍楼表';
  36. -- ============================================================
  37. -- 房间表
  38. -- ============================================================
  39. CREATE TABLE room (
  40. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  41. building_id BIGINT NOT NULL COMMENT '所属楼栋',
  42. room_number VARCHAR(20) NOT NULL COMMENT '房间号',
  43. floor INT COMMENT '所在楼层',
  44. capacity INT NOT NULL COMMENT '总床位数',
  45. gender TINYINT COMMENT '可覆盖楼栋性别限制',
  46. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  47. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  48. INDEX idx_building_id (building_id),
  49. UNIQUE KEY uk_building_room (building_id, room_number)
  50. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间表';
  51. -- ============================================================
  52. -- 床位表
  53. -- ============================================================
  54. CREATE TABLE bed (
  55. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  56. room_id BIGINT NOT NULL COMMENT '所属房间',
  57. bed_number VARCHAR(10) NOT NULL COMMENT '床位编号',
  58. status TINYINT DEFAULT 0 COMMENT '0-空闲, 1-占用, 2-维修',
  59. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  60. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  61. INDEX idx_room_id (room_id),
  62. UNIQUE KEY uk_room_bed (room_id, bed_number)
  63. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='床位表';
  64. -- ============================================================
  65. -- 分配记录表(中间表)
  66. -- ============================================================
  67. CREATE TABLE assignment (
  68. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  69. user_id BIGINT NOT NULL COMMENT '学生用户',
  70. bed_id BIGINT NOT NULL COMMENT '分配的床位',
  71. assign_date DATE NOT NULL COMMENT '入住日期',
  72. end_date DATE COMMENT '迁出日期, NULL=当前住宿',
  73. status TINYINT DEFAULT 0 COMMENT '0-当前住宿, 1-已迁出',
  74. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  75. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  76. INDEX idx_user_id (user_id),
  77. INDEX idx_bed_id (bed_id),
  78. INDEX idx_user_status (user_id, status),
  79. INDEX idx_bed_status (bed_id, status)
  80. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分配记录表';
  81. -- ============================================================
  82. -- 测试数据
  83. -- ============================================================
  84. -- 管理员账号 (密码: admin123, MD5: 21232f297a57a5a743894a0e4a801fc3)
  85. INSERT INTO user (username, password, name, role) VALUES
  86. ('admin', '21232f297a57a5a743894a0e4a801fc3', '系统管理员', 0);
  87. -- 学生账号 (密码: 123456, MD5: e10adc3949ba59abbe56e057f20f883e)
  88. INSERT INTO user (username, password, name, gender, role, student_id) VALUES
  89. ('zhangsan', 'e10adc3949ba59abbe56e057f20f883e', '张三', 1, 1, '2024001'),
  90. ('lisi', 'e10adc3949ba59abbe56e057f20f883e', '李四', 1, 1, '2024002'),
  91. ('wangwu', 'e10adc3949ba59abbe56e057f20f883e', '王五', 1, 1, '2024003');
  92. -- 宿舍楼
  93. INSERT INTO dormitory_building (name, code, gender, floor_count) VALUES
  94. ('梅苑A栋', 'MA', 1, 6),
  95. ('兰苑B栋', 'LB', 0, 6),
  96. ('竹苑C栋', 'ZC', 2, 5);
  97. -- 房间(梅苑A栋 101~103)
  98. INSERT INTO room (building_id, room_number, floor, capacity, gender) VALUES
  99. (1, '101', 1, 4, 1),
  100. (1, '102', 1, 4, 1),
  101. (1, '103', 1, 4, 1);
  102. -- 床位(101 房间 4 个床位)
  103. INSERT INTO bed (room_id, bed_number, status) VALUES
  104. (1, 'A', 0), (1, 'B', 0), (1, 'C', 0), (1, 'D', 0);