• 数据库设计(六)第二范式(2NF)?


    For a table to be in the Second Normal Form, it must satisfy two conditions:

    1. The table should be in the First Normal Form.
    2. There should be no Partial Dependency(部分依赖是什么鬼).

    What is Partial Dependency? Do not worry about it. First let's understand what is Dependency in a table?


    What is Dependency?

    Let's take an example of a Student table with columns student_idnamereg_no(registration number), branch and address(student's home address).

    Even for a case, where student names are same, if we know the student_id we can easily fetch the correct record.In this table, student_id is the primary key and will be unique for every row, hence we can use student_id to fetch any row of data from this table


    I can ask from branch name of student with student_id 10, and I can get it. Similarly, if I ask for name of student with student_id 10 or 11, I will get it. So all I need is student_id and every other column depends on it, or can be fetched using it.Hence we can say a Primary Key for a table is the column or a group of columns(composite key) which can uniquely identify each record in the table.

    This is Dependency and we also call it Functional Dependency.


    What is Partial Dependency?

    Now that we know what dependency is, we are in a better state to understand what partial dependency is.

    For a simple table like Student, a single column like student_id can uniquely identfy all the records in a table.

    But this is not true all the time. So now let's extend our example to see if more than 1 column together can act as a primary key.

    Let's create another table for Subject, which will have subject_id and subject_name fields and subject_id will be the primary key.

    Let's create another table Score, to store the marks obtained by students in the respective subjects. We will also be saving name of the teacher who teaches that subject along with marks.Now we have a Student table with student information and another table Subject for storing subject information.

    Together, student_id + subject_id forms a Candidate Key(learn about Database Keys) for this table, which can be the Primary key.In the score table we are saving the student_id to know which student's marks are these and subject_id to know for which subject the marks are for.

    Confused, How this combination can be a primary key?

    See, if I ask you to get me marks of student with student_id 10, can you get it from this table? No, because you don't know for which subject. And if I give you subject_id, you would not know for which student. Hence we need student_id + subject_id to uniquely identify any row.

    But where is Partial Dependency?

    Now if you look at the Score table, we have a column names teacher which is only dependent on the subject, for Java it's Java Teacher and for C++ it's C++ Teacher & so on.

    Now as we just discussed that the primary key for this table is a composition of two columns which is student_id & subject_id but the teacher's name only depends on subject, hence the subject_id, and has nothing to do with student_id.

    This is Partial Dependency, where an attribute in a table depends on only a part of the primary key and not on the whole key.


    How to remove Partial Dependency?

    There can be many different solutions for this, but out objective is to remove teacher's name from Score table.

    The simplest solution is to remove columns teacher from Score table and add it to the Subject table. Hence, the Subject table will become:

    And our Score table is now in the second normal form, with no partial dependency.


    Quick Recap

    1. For a table to be in the Second Normal form, it should be in the First Normal form and it should not have Partial Dependency.
    2. Partial Dependency exists, when for a composite primary key, any attribute in the table depends only on a part of the primary key and not on the complete primary key.
    3. To remove Partial dependency, we can divide the table, remove the attribute which is causing partial dependency, and move it to some other table where it fits in well.
  • 相关阅读:
    Mybatis 根据日期建表
    Java 文档类链接和超链接
    Jenkins 修改构建版本号
    商场大厦路径指引导视软件-智能商场导视系统-古镇公园3D实景地图
    工业园区智能标识导视系统-智能导示系统软件-医院商场导视系统软件
    景区智能导视系统-商场导视系统软件-电子智能导视系统开发
    商场导视系统软件-商场导视系统UI软件界面-智能商场导视系统
    触摸屏iPad控制软件-大屏平板互动软件-智能触摸屏同屏控制系统
    平板电脑控屏系统-大屏平板互动软件-win平板与大屏互动软件
    Android一键传屏触摸一体机-大屏平板互动软件-智能触摸屏投屏系统
  • 原文地址:https://www.cnblogs.com/tuhooo/p/8461578.html
Copyright © 2020-2023  润新知