根据之前提供的开发设计文档概述,我们可以设计以下数据库表结构,以符合第三范式(BCNF)的要求,确保数据冗余最小化和数据依赖合理化。这里仅列出主要的几个表及其关键字段,具体实现时可能还需根据实际情况调整。

1. 用户表(User)

  • 字段:

    • user_id(主键,自增ID)
    • username(用户名,唯一)
    • password(加密后的密码)
    • email(邮箱,唯一)
    • role(角色类型,如'patient', 'staff', 'admin')
    • is_active(账户激活状态,布尔值)
  • 主键: user_id

2. 疫苗信息表(Vaccine)

  • 字段:

    • vaccine_id(主键,自增ID)
    • name(疫苗名称)
    • manufacturer(制造商)
    • description(疫苗描述)
    • recommended_age_group(推荐年龄组)
    • dosing_schedule(接种周期说明)
  • 主键: vaccine_id

3. 预约表(Appointment)

  • 字段:

    • appointment_id(主键,自增ID)
    • user_id(外键,关联用户表)
    • vaccine_id(外键,关联疫苗信息表)
    • appointment_date(预约日期)
    • appointment_time(预约时间)
    • status(预约状态,如'pending', 'confirmed', 'cancelled')
  • 主键: appointment_id

  • 外键: user_id, vaccine_id

4. 接种记录表(VaccinationRecord)

  • 字段:

    • record_id(主键,自增ID)
    • appointment_id(外键,关联预约表)
    • vaccine_batch_number(疫苗批号)
    • administered_by_user_id(接种操作员ID,外键关联用户表)
    • administration_date(接种日期)
  • 主键: record_id

  • 外键: appointment_id, administered_by_user_id

5. 库存表(Inventory)

  • 字段:

    • inventory_id(主键,自增ID)
    • vaccine_id(外键,关联疫苗信息表)
    • batch_number(批次号)
    • quantity(库存数量)
    • expiry_date(过期日期)
  • 主键: inventory_id

  • 外键: vaccine_id

主键与外键总结

  • 主键用于唯一标识表中的每一行,确保数据的实体完整性。
  • 外键用于建立表之间的联系,确保引用完整性,如user_idAppointment表中作为外键引用User表,表明预约与用户的关系。

以上设计已尽量遵循BC范式,每个非主键字段都直接依赖于主键,不存在传递依赖,减少了数据冗余和异常更新的风险。