# 校园生活平台需求分析报告 校园生活平台原有业务范围较广。结合《数据库原理及应用》课程设计的考核重点,本文将平台基础管理、功能房预约和课程资源分享三个模块作为本次需求分析的主要对象,重点说明系统需要支持的业务活动、需要保存的数据对象及其联系,以及这些数据在后续数据库设计中应满足的基本约束。 从业务特点来看,这三个模块既包含用户、组织、角色、权限等公共基础数据,也包含预约、审核、资源发布、下载记录和积分记录等过程性数据,能够较好体现数据库课程设计中对实体识别、联系抽取、规范化处理和完整性约束设计的要求。 ## 1 功能需求分析 ### 1.1 平台基础管理模块 平台基础管理模块负责为其他业务模块提供统一的身份、组织和权限支撑。该模块的功能需求不仅关系到用户能否正常使用系统,也直接影响后续数据库中用户表、组织表、角色表、权限表及相关联系表的设计方式。其主要功能需求如表 1-1 所示。 | 编号 | 功能要求 | | --- | --- | | PF-01 | 系统应支持用户完成注册、登录、退出和基本身份验证。 | | PF-02 | 系统应支持维护真实姓名、学号、联系方式等个人资料信息。 | | PF-03 | 管理员应能够对用户执行审核、启用、停用和封禁等状态管理操作。 | | PF-04 | 系统应支持部门信息的新增、修改、删除及上下级关系维护。 | | PF-05 | 系统应支持岗位信息维护,并允许用户与岗位建立对应关系。 | | PF-06 | 系统应支持角色维护、权限定义和用户角色分配。 | | PF-07 | 系统应支持按业务模块配置角色的数据访问范围。 | | PF-08 | 系统应自动记录关键管理行为,并支持按用户、时间和模块查询审计日志。 | ### 1.2 功能房预约模块 功能房预约模块主要面向校园公共空间的查询、申请和审核管理。该模块的功能设计需要能够完整表达房间资源、预约申请、审核处理和使用统计等业务过程,其主要功能需求如表 1-2 所示。 | 编号 | 功能要求 | | --- | --- | | FR-01 | 系统应支持楼房和房间基础信息的维护,包括名称、位置、容量等内容。 | | FR-02 | 系统应支持按楼房、楼层和时间段查询房间的占用情况。 | | FR-03 | 普通用户应能够提交预约申请,并填写预约时间、使用用途和申请说明。 | | FR-04 | 系统应支持在预约申请中维护参与人信息。 | | FR-05 | 工作人员应能够对预约申请执行通过或驳回处理,并记录审核意见。 | | FR-06 | 用户应能够查询本人预约记录,并在符合条件时取消预约。 | | FR-07 | 对于被驳回的预约,系统应允许用户修改后重新提交。 | | FR-08 | 系统应支持对违规用户进行封禁管理,并限制其在封禁期间提交预约。 | | FR-09 | 系统应支持按时间范围统计房间使用情况和用户使用情况。 | ### 1.3 课程资源分享模块 课程资源分享模块主要面向教学资料的投稿、审核、发布和使用统计。该模块除了要保存资源主体信息外,还需要表达围绕资源产生的审核、下载、推荐和积分变化等行为数据,其主要功能需求如表 1-3 所示。 | 编号 | 功能要求 | | --- | --- | | CR-01 | 系统应支持专业和课程基础信息维护。 | | CR-02 | 系统应支持为每个专业配置相应负责人。 | | CR-03 | 普通用户应能够选择课程并创建资源草稿。 | | CR-04 | 系统应支持资源标题、说明、文件地址或外部链接等内容录入。 | | CR-05 | 用户应能够将草稿提交审核,并查询资源当前状态。 | | CR-06 | 审核人员应能够对资源执行通过、驳回和下架处理。 | | CR-07 | 已发布资源应支持按专业、课程和关键词进行查询。 | | CR-08 | 系统应支持资源浏览与下载,并记录下载行为。 | | CR-09 | 系统应支持资源推荐管理,并保存推荐记录。 | | CR-10 | 系统应支持记录积分变化,并用于后续排行或统计分析。 | 综合来看,三个模块虽然面向的业务对象不同,但都需要在数据库中清楚表达用户、对象、状态、联系和日志等核心信息。因此,功能需求分析的结果将直接影响后续实体设计、联系设计和完整性约束设计。 ## 2 数据需求分析 ### 2.1 平台基础管理模块 平台基础管理模块中的核心数据包括用户身份数据、用户资料数据、部门数据、岗位数据、角色数据、权限数据、数据范围规则和审计日志数据。其中,用户身份数据与用户资料数据之间应保持一对一对应关系,部门数据应能够表达上下级层次结构,用户与部门、用户与岗位、用户与角色、角色与权限之间则应通过联系表表示多对多关系。 从完整性要求来看,用户必须具有唯一标识,登录名或学号等关键业务属性应具有唯一性;角色编码、权限编码等也应保持唯一,以避免权限定义出现歧义。对于审计日志数据,系统应能够保存操作者、操作时间、操作对象、操作类型和处理结果,从而为后续责任追踪提供依据。 ### 2.2 功能房预约模块 功能房预约模块中的核心数据包括楼房数据、房间数据、预约主体数据、预约参与人数据和用户封禁数据。楼房与房间之间构成稳定的一对多关系,房间不能脱离楼房单独存在;预约主体必须同时关联房间和申请人,而参与人信息则应通过独立联系表保存,以避免在预约主表中重复存储人员信息。 从完整性要求来看,预约记录应能够表示申请时间、开始时间、结束时间、预约状态、审核信息和使用说明等内容,并保证结束时间晚于开始时间。同一房间在有效预约状态下不应出现时间冲突;封禁记录应能表达封禁原因、生效时间、失效时间和当前状态,使系统能够据此判断某一用户是否具备预约资格。 ### 2.3 课程资源分享模块 课程资源分享模块中的核心数据包括专业数据、课程数据、专业负责人关系数据、资源主体数据、下载记录数据、推荐记录数据和积分事件数据。专业与课程之间应保持一对多关系,专业负责人与专业之间应通过联系表建立对应关系。资源主体应明确对应某一课程和某一提交用户,并能够表示资源类型、资源状态、提交时间和审核信息。 从完整性要求来看,文件型资源和链接型资源应根据资源类型保存不同的内容字段,资源状态应能够反映草稿、待审、已发布、已驳回和已下架等业务含义。下载、推荐和积分变化等行为数据不宜直接写入资源主表,而应通过独立事件表进行记录,以便后续进行统计分析并减少更新异常。 由以上分析可以看出,本系统的数据需求不仅涉及实体本身的属性设计,也涉及实体之间的联系设计、状态设计和行为记录设计。只有在需求阶段将这些数据要求表述清楚,后续数据库设计中的主键、外键、唯一约束和检查约束才能具备明确依据。 ## 3 数据字典 为便于后续数据库设计,下面按模块给出系统中的主要数据对象及其关键属性说明。 ### 3.1 平台基础管理模块 | 数据对象 | 关键属性 | 说明 | | --- | --- | --- | | `users` | `user_id`、`login_name`、`user_status` | 保存系统用户身份信息 | | `profiles` | `user_id`、`real_name`、`student_no`、`phone` | 保存用户个人资料 | | `departments` | `dept_id`、`parent_dept_id`、`dept_name` | 保存组织结构信息 | | `positions` | `position_id`、`position_name` | 保存岗位信息 | | `roles` | `role_id`、`role_code`、`role_name` | 保存角色信息 | | `permissions` | `permission_id`、`permission_code`、`permission_name` | 保存权限定义 | | `user_roles` | `user_id`、`role_id` | 保存用户与角色的对应关系 | | `audit_logs` | `log_id`、`actor_user_id`、`action_type`、`action_time` | 保存关键管理操作日志 | ### 3.2 功能房预约模块 | 数据对象 | 关键属性 | 说明 | | --- | --- | --- | | `facility_buildings` | `building_id`、`building_name` | 保存楼房基础信息 | | `facility_rooms` | `room_id`、`building_id`、`room_name`、`capacity` | 保存房间基础信息 | | `facility_reservations` | `reservation_id`、`room_id`、`applicant_user_id`、`start_time`、`end_time`、`reservation_status` | 保存预约主体信息 | | `facility_reservation_participants` | `reservation_id`、`user_id`、`is_applicant` | 保存预约参与人信息 | | `facility_user_bans` | `ban_id`、`user_id`、`start_time`、`end_time`、`ban_status` | 保存用户封禁信息 | ### 3.3 课程资源分享模块 | 数据对象 | 关键属性 | 说明 | | --- | --- | --- | | `majors` | `major_id`、`major_name` | 保存专业信息 | | `courses` | `course_id`、`major_id`、`course_name` | 保存课程信息 | | `major_leads` | `major_id`、`user_id` | 保存专业负责人关系 | | `course_resources` | `resource_id`、`course_id`、`creator_user_id`、`resource_type`、`resource_status` | 保存资源主体信息 | | `course_resource_downloads` | `download_id`、`resource_id`、`user_id`、`download_time` | 保存资源下载记录 | | `course_resource_recommendations` | `recommend_id`、`resource_id`、`operator_user_id`、`recommend_time` | 保存资源推荐记录 | | `course_resource_score_events` | `score_event_id`、`user_id`、`resource_id`、`score_delta` | 保存积分变化记录 | ## 4 系统 E-R 图 为了避免将全部实体关系集中在一张图中造成阅读困难,下面按模块分别给出系统的核心 E-R 图。图中只展示主要实体及其基本联系,具体字段约束和辅助表将在后续数据库设计阶段继续细化。 ### 4.1 平台基础管理模块 E-R 图 ```mermaid erDiagram USERS { uuid user_id PK string login_name string user_status } PROFILES { uuid user_id PK, FK string real_name string student_no } DEPARTMENTS { uuid dept_id PK uuid parent_dept_id FK string dept_name } ROLES { uuid role_id PK string role_name } PERMISSIONS { uuid permission_id PK string permission_name } USER_DEPARTMENTS { uuid user_id PK, FK uuid dept_id PK, FK bool is_primary } USER_ROLES { uuid user_id PK, FK uuid role_id PK, FK } ROLE_PERMISSIONS { uuid role_id PK, FK uuid permission_id PK, FK } AUDIT_LOGS { uuid log_id PK uuid actor_user_id FK string action_type } USERS ||--|| PROFILES : has DEPARTMENTS ||--o{ DEPARTMENTS : parent_child USERS ||--o{ USER_DEPARTMENTS : belongs DEPARTMENTS ||--o{ USER_DEPARTMENTS : contains USERS ||--o{ USER_ROLES : assigned ROLES ||--o{ USER_ROLES : maps ROLES ||--o{ ROLE_PERMISSIONS : grants PERMISSIONS ||--o{ ROLE_PERMISSIONS : includes USERS ||--o{ AUDIT_LOGS : writes ``` ### 4.2 功能房预约模块 E-R 图 ```mermaid erDiagram USERS { uuid user_id PK string login_name } FACILITY_BUILDINGS { uuid building_id PK string building_name } FACILITY_ROOMS { uuid room_id PK uuid building_id FK string room_name } FACILITY_RESERVATIONS { uuid reservation_id PK uuid room_id FK uuid applicant_user_id FK datetime start_time datetime end_time string reservation_status } FACILITY_RESERVATION_PARTICIPANTS { uuid reservation_id PK, FK uuid user_id PK, FK bool is_applicant } FACILITY_USER_BANS { uuid ban_id PK uuid user_id FK datetime start_time datetime end_time } FACILITY_BUILDINGS ||--o{ FACILITY_ROOMS : contains FACILITY_ROOMS ||--o{ FACILITY_RESERVATIONS : used_by USERS ||--o{ FACILITY_RESERVATIONS : applies FACILITY_RESERVATIONS ||--o{ FACILITY_RESERVATION_PARTICIPANTS : includes USERS ||--o{ FACILITY_RESERVATION_PARTICIPANTS : participates USERS ||--o{ FACILITY_USER_BANS : restricted ``` ### 4.3 课程资源分享模块 E-R 图 ```mermaid erDiagram USERS { uuid user_id PK string login_name } MAJORS { uuid major_id PK string major_name } COURSES { uuid course_id PK uuid major_id FK string course_name } MAJOR_LEADS { uuid major_id PK, FK uuid user_id PK, FK } COURSE_RESOURCES { uuid resource_id PK uuid course_id FK uuid creator_user_id FK string resource_type string resource_status } COURSE_RESOURCE_DOWNLOADS { uuid download_id PK uuid resource_id FK uuid user_id FK datetime download_time } COURSE_RESOURCE_SCORE_EVENTS { uuid score_event_id PK uuid user_id FK uuid resource_id FK int score_delta } MAJORS ||--o{ COURSES : contains MAJORS ||--o{ MAJOR_LEADS : assigns USERS ||--o{ MAJOR_LEADS : serves COURSES ||--o{ COURSE_RESOURCES : owns USERS ||--o{ COURSE_RESOURCES : submits COURSE_RESOURCES ||--o{ COURSE_RESOURCE_DOWNLOADS : generates USERS ||--o{ COURSE_RESOURCE_DOWNLOADS : downloads COURSE_RESOURCES ||--o{ COURSE_RESOURCE_SCORE_EVENTS : affects USERS ||--o{ COURSE_RESOURCE_SCORE_EVENTS : receives ``` 由以上 E-R 图可以看出,系统的公共基础数据与各业务模块之间保持相对清晰的支撑关系,而每个业务模块内部又具有较明确的主从结构和联系结构。这种分模块表达方式比将全部关系堆叠在一张图中更便于阅读,也更适合作为后续关系模式转换和完整性约束设计的依据。 ## 5 数据库关系视图 ### 5.1 平台基础管理模块 平台基础模块主要负责表达用户、组织和权限之间的关系。除主体关系外,该模块还包含用户与部门、用户与岗位、用户与角色、角色与权限之间的联系关系,以及数据范围规则和审计日志等管理性关系。其主要关系视图如表 5-1 所示。 | 关系名 | 主要属性 | 关系说明 | | --- | --- | --- | | `USERS` | `user_id`,`login_name`,`email`,`password_hash`,`user_status` | 保存用户身份信息 | | `PROFILES` | `user_id`,`real_name`,`student_no`,`gender`,`phone` | 保存用户个人资料 | | `DEPARTMENTS` | `dept_id`,`parent_dept_id`,`dept_name` | 保存部门层级结构 | | `POSITIONS` | `position_id`,`position_name` | 保存岗位信息 | | `USER_DEPARTMENTS` | `user_id`,`dept_id`,`is_primary` | 保存用户与部门对应关系 | | `USER_POSITIONS` | `user_id`,`position_id` | 保存用户与岗位对应关系 | | `ROLES` | `role_id`,`role_code`,`role_name` | 保存角色信息 | | `PERMISSIONS` | `permission_id`,`permission_code`,`permission_name` | 保存权限定义 | | `USER_ROLES` | `user_id`,`role_id` | 保存用户与角色对应关系 | | `ROLE_PERMISSIONS` | `role_id`,`permission_id` | 保存角色与权限对应关系 | | `DATA_SCOPE_RULES` | `scope_id`,`role_id`,`module_code`,`scope_type` | 保存角色的数据范围规则 | | `AUDIT_LOGS` | `log_id`,`actor_user_id`,`action_type`,`target_type`,`target_id`,`action_time`,`action_result` | 保存关键管理操作日志 | 从上述关系可以看出,平台基础模块的特点是主体关系与联系关系并存,多对多关系通过独立关系表进行展开。这种处理方式有利于减少冗余,也便于后续通过外键维护引用完整性。 ### 5.2 功能房预约模块 功能房预约模块主要负责表达楼房、房间、预约申请、参与人和封禁记录之间的关系。这部分关系既反映静态空间对象,也反映预约过程中的状态变化和参与情况,其主要关系视图如表 5-2 所示。 | 关系名 | 主要属性 | 关系说明 | | --- | --- | --- | | `FACILITY_BUILDINGS` | `building_id`,`building_name`,`location` | 保存楼房基础信息 | | `FACILITY_ROOMS` | `room_id`,`building_id`,`floor_no`,`room_name`,`capacity` | 保存房间基础信息 | | `FACILITY_RESERVATIONS` | `reservation_id`,`room_id`,`applicant_user_id`,`start_time`,`end_time`,`use_purpose`,`reservation_status`,`reviewer_user_id`,`review_time`,`review_comment` | 保存预约主体和审核信息 | | `FACILITY_RESERVATION_PARTICIPANTS` | `reservation_id`,`user_id`,`is_applicant` | 保存预约参与人关系 | | `FACILITY_USER_BANS` | `ban_id`,`user_id`,`start_time`,`end_time`,`ban_reason`,`ban_status` | 保存用户封禁记录 | 这一模块中,房间依附于楼房存在,预约依附于房间和申请用户存在,参与人和封禁记录分别承担联系信息和过程状态信息的保存功能。这样处理以后,预约主表能够集中表达一次预约的核心事实,而重复发生的参与和限制信息则由独立关系承担,结构上更加清晰。 ### 5.3 课程资源分享模块 课程资源分享模块主要负责表达专业、课程、资源主体以及围绕资源产生的下载、推荐和积分等业务行为。与前两个模块相比,这一部分更强调教学层级和资源事件的分离,其主要关系视图如表 5-3 所示。 | 关系名 | 主要属性 | 关系说明 | | --- | --- | --- | | `MAJORS` | `major_id`,`major_name` | 保存专业信息 | | `COURSES` | `course_id`,`major_id`,`course_name`,`course_code` | 保存课程信息 | | `MAJOR_LEADS` | `major_id`,`user_id` | 保存专业负责人关系 | | `COURSE_RESOURCES` | `resource_id`,`course_id`,`creator_user_id`,`resource_title`,`resource_type`,`resource_status`,`storage_uri`,`external_url`,`submitted_at`,`reviewed_by`,`reviewed_at` | 保存资源主体信息 | | `COURSE_RESOURCE_DOWNLOADS` | `download_id`,`resource_id`,`user_id`,`download_time` | 保存资源下载记录 | | `COURSE_RESOURCE_RECOMMENDATIONS` | `recommend_id`,`resource_id`,`operator_user_id`,`recommend_time`,`recommend_status` | 保存资源推荐记录 | | `COURSE_RESOURCE_SCORE_EVENTS` | `score_event_id`,`user_id`,`resource_id`,`event_type`,`score_delta`,`occurred_at` | 保存积分变化记录 | 这一模块中,专业、课程和资源主体构成稳定的主线结构,而下载、推荐和积分等行为数据独立成表,既可以避免把多次发生的事实压缩在一条资源记录中,也有利于后续进行统计、排序和审计分析。 ## 6 系统设计流程图 ### 6.1 平台基础管理模块 平台基础管理模块的处理流程主要围绕身份识别、权限校验、基础管理操作和日志记录展开。与简单的线性处理不同,该模块在身份验证失败、权限不足和数据校验失败等情况下都应产生不同处理结果,其基本流程如图所示。 ```mermaid flowchart TD A[用户或管理员发起请求] --> B{身份验证是否通过} B -- 否 --> B1[返回登录失败信息] B -- 是 --> C[读取用户角色与权限] C --> D{是否具有对应操作权限} D -- 否 --> D1[拒绝访问并记录失败日志] D -- 是 --> E[执行用户/组织/角色管理操作] E --> F{数据校验是否通过} F -- 否 --> F1[返回校验错误信息] F -- 是 --> G[写入基础数据及联系数据] G --> H[记录审计日志] H --> I[返回处理结果] ``` ### 6.2 功能房预约模块 功能房预约模块的业务处理并不是单一路径,而是可以分为“预约申请与审核”和“履约变更与异常处理”两个阶段。前一阶段强调申请提交前后的规则校验和审核流转,后一阶段强调预约生效后的取消、违约和封禁处理。 ```mermaid flowchart TD A[查询楼宇与房间] --> B[选择日期和时段] B --> C[填写预约说明
与参与人] C --> D{信息是否完整} D -- 否 --> D1[补充信息
或继续修改] D1 --> C D -- 是 --> E{是否处于
封禁期} E -- 是 --> E1[拒绝提交并提示原因] E -- 否 --> F{房间时段
是否冲突} F -- 是 --> F1[重新选择房间
或预约时间] F1 --> B F -- 否 --> G[生成待审申请] G --> H{是否需要
人工审核} H -- 否 --> I[系统自动通过] H -- 是 --> J[工作人员审核] J --> K{审核结果} K -- 通过 --> I K -- 驳回 --> L[记录驳回意见] L --> M{是否修改重提} M -- 是 --> C M -- 否 --> N[结束本次申请] I --> O[形成有效预约] ``` 预约生效后,系统还需要继续处理用户取消、正常使用、爽约违约和封禁处置等后续状态变化,其履约变更与异常处理流程如图所示。 ```mermaid flowchart TD A[有效预约生效] --> B{是否在使用前
主动取消} B -- 是 --> C[更新为已取消
并释放时段] B -- 否 --> D{用户是否
正常到场} D -- 是 --> E[登记使用情况] E --> F[更新为已完成] D -- 否 --> G[记录违约
或异常情况] G --> H{是否需要
封禁处理} H -- 是 --> I[新增封禁记录] H -- 否 --> J[记录处理意见] C --> K[写入日志
与统计数据] F --> K I --> K J --> K ``` ### 6.3 课程资源分享模块 课程资源分享模块同样可以分为“资源投稿与审核”和“发布后的使用与下架”两个阶段。前一阶段重点体现草稿、提交审核、驳回重提等业务状态,后一阶段重点体现发布后下载、推荐、积分记录和下架处理等过程。 ```mermaid flowchart TD A[选择课程并创建草稿] --> B[填写标题
和资源说明] B --> C{资源类型} C -- 文件 --> D[上传资源文件] C -- 外链 --> E[填写外部链接] D --> F{信息是否完整} E --> F F -- 否 --> G[保存草稿
继续编辑] G --> B F -- 是 --> H[提交审核] H --> I[审核人检查内容] I --> J{审核结果} J -- 通过 --> K[发布资源] J -- 驳回 --> L[记录驳回意见] L --> M{是否修改重提} M -- 是 --> B M -- 否 --> N[保留驳回状态] ``` 资源发布后,系统还需要继续处理检索浏览、下载记录、积分变化、推荐展示、申请下架或违规下架等后续活动,其发布后的使用与下架流程如图所示。 ```mermaid flowchart TD A[资源已发布] --> B[用户检索与浏览] B --> C{是否下载} C -- 是 --> D[记录下载事件] D --> E[记录积分变化] C -- 否 --> F{是否进入
推荐展示} E --> F F -- 是 --> G[写入推荐记录] F -- 否 --> H{是否申请下架
或违规下架} G --> H H -- 否 --> I[保持发布状态] H -- 是 --> J[管理员执行下架] J --> K[更新为已下架
并停止公开展示] K --> L{是否重新提交
或恢复上架} L -- 是 --> M[重新审核后发布] L -- 否 --> N[归档保留] ``` 从整体流程上看,三个模块虽然面向的业务对象不同,但都遵循“输入业务信息、执行规则校验、写入数据库并保存处理结果”的基本处理逻辑。数据库始终处于系统运行的核心位置,既承担业务事实的存储功能,也承担后续统计分析和约束控制的基础支撑作用。