美文网首页
数据库结构设计

数据库结构设计

作者: AD刘涛 | 来源:发表于2021-01-26 15:25 被阅读0次
    1. 减少数据冗余。
    2. 尽量避免数据维护中出现更新,插入和删除异常。
    • 插入异常: 如果表中的某个实体随着另一个实体而存在
    • 更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新
    • 删除异常:如果删除表中的某一实体则会导致其他实体的消息
    3. 节约存储空间
    4. 提高SQL的查询效率

    如何理解插入异常

    假设这是我们当前设计的表结构。在这个表,存在着两个实体。其中一个实体是学生信息,另一个实体是课程信息。PRIMARY KEY (study_no,course_name) 表明一个学生只能选择相同的课程一次。当前我们只插入以下语句时,
    insert into selectcourse(course_name, course_point) values('语文', 10)
    则会产生异常。在没有学生选择这门课时,无法把新课程插入到表中。这也就是表中的某个实体随着另一个实体而存在

    CREATE TABLE `selectcourse` (
      `study_no` int NOT NULL COMMENT '学号',
      `study_name` varchar(10) COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名',
      `birth_date` timestamp NOT NULL COMMENT '生日',
      `course_name` varchar(10) COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程名称',
      `score` int DEFAULT NULL COMMENT '成绩',
      `course_point` int NOT NULL COMMENT '学分',
      PRIMARY KEY (`study_no`,`course_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    

    如何理解更新异常呢

    mysql> select * from selectcourse;
    +----------+------------+---------------------+-------------+-------+--------------+
    | study_no | study_name | birth_date          | course_name | score | course_point |
    +----------+------------+---------------------+-------------+-------+--------------+
    |        1 | 张三       | 2021-01-26 14:32:36 | 数学        |  NULL |           10 |
    |        1 | 张三       | 2021-01-26 14:34:53 | 英语        |  NULL |            9 |
    |        2 | 李四       | 2021-01-26 14:35:26 | 数学        |  NULL |           10 |
    |        2 | 李四       | 2021-01-26 14:35:47 | 英语        |  NULL |            9 |
    +----------+------------+---------------------+-------------+-------+--------------+
    4 rows in set (0.00 sec)
    

    假设我们要更新数学该科目的学分:
    update selectcourse set course_point=15 where course_name='数学'
    我们会看到以下执行结果:

    mysql> update selectcourse set course_point=15 where course_name='数学';
    Query OK, 2 rows affected (0.00 sec)
    Rows matched: 2  Changed: 2  Warnings: 0
    

    我们可以看到其更新了2行数据。这也就意味着选择该科目的学员越多,更新的学分【行】也就越多。这就是更新异常的具体表现。

    相关文章

      网友评论

          本文标题:数据库结构设计

          本文链接:https://www.haomeiwen.com/subject/efugzktx.html