You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:如何将给定数据结构转换为第一范式(1NF)?

如何将给定数据结构转换为仅满足第一范式(1NF)的形式

1NF的核心要求

第一范式(1NF)的核心规则很简单:所有属性必须是原子值——也就是每一列的每个单元格只能存储单个、不可再分的值,不能有重复的属性组或多值字段。它不处理数据冗余问题(那是2NF、3NF的目标),只保证数据的“原子性”。

转换后的1NF结构

你给出的原始结构里,DEPARTMENT、ADVISOR、COURSE这三个表本身已经满足1NF,不需要修改:

DEPARTMENT (DEPT_ID, DEPT_NAME)
ADVISOR (ADVISOR_ID, ADVISOR_LAST_NAME, ADVISOR_FIRST_NAME, DEPT_ID)
COURSE( COURSE_ID, COURSE_DESCP)

重点处理的是STUDENT表:
原始STUDENT表如果存在一个学生选修多门课程的情况,会出现同一STUDENT_ID对应多个COURSE_ID、COURSE_DESCP、GRADE的重复组,违反1NF。转换为1NF只需要把这类重复组拆成独立的行,每个行对应一个学生的一门课程记录,同时保持所有属性为单一原子值即可——不需要消除冗余(比如保留COURSE_DESCP、导师姓名这些重复字段完全符合1NF):

STUDENT (STUDENT_ID, STUDENT_FIRST_NAME, STUDENT_LAST_NAME, COURSE_ID, COURSE_DESCP, GRADE, ADVISOR_ID, ADVISOR_FIRST_NAME, ADVISOR_LAST_NAME)

实际转换示例

举个直观例子:假设学生张三(STUDENT_ID=1)选了数学和英语两门课,原来违反1NF的记录可能是这样的(多值字段用方括号表示):

1, 张, 三, [MATH101, ENGL202], [数学入门, 大学英语], [A, B], 100, 李, 明

转换为1NF后就拆成两行,每个单元格都是单一值:

1, 张, 三, MATH101, 数学入门, A, 100, 李, 明
1, 张, 三, ENGL202, 大学英语, B, 100, 李, 明

这样就完全符合1NF的要求了。

内容的提问来源于stack exchange,提问作者Christian Baack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:10:36