Database 规范化两列表

Database 规范化两列表,database,database-normalization,Database,Database Normalization,我正在尝试规范化一个数据库,我们目前有一个名为BOOK的表,其中ISBN(FK)和CoverType是列,它们连接在一起形成一个PK i、 e 这个表已经正常化了吗?我想是的,但我真的没有什么理由。 谢谢我不知道什么是不正常化的 如果还有什么我也不知道,但是从我看到的情况来看,它看起来不错。我不确定它有什么不正常的地方。 如果还有什么我不知道,但是从我看到的来看,它看起来很好。正如您的post书(ISBN,COVERTYPE)中所述,是标准化的,因为您的所有字段都是单值的,并且主键的任何部分都不

我正在尝试规范化一个数据库,我们目前有一个名为BOOK的表,其中ISBN(FK)和CoverType是列,它们连接在一起形成一个PK

i、 e

这个表已经正常化了吗?我想是的,但我真的没有什么理由。
谢谢

我不知道什么是不正常化的


如果还有什么我也不知道,但是从我看到的情况来看,它看起来不错。

我不确定它有什么不正常的地方。


如果还有什么我不知道,但是从我看到的来看,它看起来很好。

正如您的post
书(ISBN,COVERTYPE)中所述,
是标准化的,因为您的所有字段都是单值的,并且主键的任何部分都不能从它的子集派生出来(例如,你不能仅仅通过查看ISBN本身就知道哪些是ISBN的所有可能的隐蔽类型,反之亦然)。

正如你的post
书(ISBN,隐蔽类型)
是规范化的,因为你所有的字段都是单值的,并且主键的任何部分都不能从它的子集派生出来(例如,你不能仅仅通过查看ISBN本身就知道哪些是ISBN的所有可能的隐藏类型,反之亦然).

事实上,该表上没有太多要规范化的内容。您没有冗余,也没有关系。看起来很好。

事实上,该表上没有太多要规范化的内容。您没有冗余,也没有关系。看起来很好

这个表已经正常化了吗

先是警告,然后是回答

警告

关系建模中的某些术语有非常具体的含义。规范化不是其中之一,至少当有人像你那样使用它时不是

问“这张表在3NF中吗?”,或者“这张表在5NF中吗?”,是有意义的,但问它是否正常化是没有意义的。仅凭这一点,你就可以找到“这是正常化的”意思的答案

  • 它是3NF的
  • 在5NF中
  • 它有一个身份证号码
  • 它只有不到20列
  • 所有文本都已替换为id号
只有前两个是有意义的,其余的与规范化无关

最后,我的回答

我假设你的数据是有道理的。我从来没有在会计层面上对账簿进行过更详细的处理,所以我从来都不需要知道ISBN和封面类型是如何协同工作的

你可以这样造桌子

create table books (
  isbn varchar(13) not null,
  cover_type varchar(10) not null,
  primary key (isbn, cover_type)
);
如果你这样做了,你就不会有非素数属性(所有列都是至少一个候选键的一部分),所以你至少有2NF。没有可传递的依赖项,所以你至少有3NF。没有多值依赖项,所以至少有4NF。根本没有连接依赖项,所以你至少有6NF,或者“终极范式”

在现实生活中,你会希望对这些列有更多的限制。我建议至少有两个

  • “cover_type”上的检查约束或外键约束
  • 计算并比较“isbn”上的校验数字
  • 如果只导入,则可以在导入前编写外部程序验证校验位

    这个表已经正常化了吗

    先是警告,然后是回答

    警告

    关系建模中的某些术语有非常具体的含义。规范化不是其中之一,至少当有人像你那样使用它时不是

    问“这张表在3NF中吗?”,或者“这张表在5NF中吗?”,是有意义的,但问它是否正常化是没有意义的。仅凭这一点,你就可以找到“这是正常化的”意思的答案

    • 它是3NF的
    • 在5NF中
    • 它有一个身份证号码
    • 它只有不到20列
    • 所有文本都已替换为id号
    只有前两个是有意义的,其余的与规范化无关

    最后,我的回答

    我假设你的数据是有道理的。我从来没有在会计层面上对账簿进行过更详细的处理,所以我从来都不需要知道ISBN和封面类型是如何协同工作的

    你可以这样造桌子

    create table books (
      isbn varchar(13) not null,
      cover_type varchar(10) not null,
      primary key (isbn, cover_type)
    );
    
    如果你这样做了,你就不会有非素数属性(所有列都是至少一个候选键的一部分),所以你至少有2NF。没有可传递的依赖项,所以你至少有3NF。没有多值依赖项,所以至少有4NF。根本没有连接依赖项,所以你至少有6NF,或者“终极范式”

    在现实生活中,你会希望对这些列有更多的限制。我建议至少有两个

  • “cover_type”上的检查约束或外键约束
  • 计算并比较“isbn”上的校验数字

  • 如果只是导入,可以在导入之前编写一个外部程序来验证校验位。

    假设将添加更多行,您可以预期“精装本”和“平装本”等值将被复制。将它们移动到单独的表(如“CoverType”)中难道没有意义吗和ID上的联接?

    假设将添加更多行,您可以预期“精装本”和“平装本”等值将被复制。将它们移动到单独的表中(如“CoverType”和ID上的联接)是否有意义