Database 规范化两列表
我正在尝试规范化一个数据库,我们目前有一个名为BOOK的表,其中ISBN(FK)和CoverType是列,它们连接在一起形成一个PK i、 e 这个表已经正常化了吗?我想是的,但我真的没有什么理由。Database 规范化两列表,database,database-normalization,Database,Database Normalization,我正在尝试规范化一个数据库,我们目前有一个名为BOOK的表,其中ISBN(FK)和CoverType是列,它们连接在一起形成一个PK i、 e 这个表已经正常化了吗?我想是的,但我真的没有什么理由。 谢谢我不知道什么是不正常化的 如果还有什么我也不知道,但是从我看到的情况来看,它看起来不错。我不确定它有什么不正常的地方。 如果还有什么我不知道,但是从我看到的来看,它看起来很好。正如您的post书(ISBN,COVERTYPE)中所述,是标准化的,因为您的所有字段都是单值的,并且主键的任何部分都不
谢谢我不知道什么是不正常化的
如果还有什么我也不知道,但是从我看到的情况来看,它看起来不错。我不确定它有什么不正常的地方。
如果还有什么我不知道,但是从我看到的来看,它看起来很好。正如您的post
书(ISBN,COVERTYPE)中所述,
是标准化的,因为您的所有字段都是单值的,并且主键的任何部分都不能从它的子集派生出来(例如,你不能仅仅通过查看ISBN本身就知道哪些是ISBN的所有可能的隐蔽类型,反之亦然)。正如你的post书(ISBN,隐蔽类型)
是规范化的,因为你所有的字段都是单值的,并且主键的任何部分都不能从它的子集派生出来(例如,你不能仅仅通过查看ISBN本身就知道哪些是ISBN的所有可能的隐藏类型,反之亦然).事实上,该表上没有太多要规范化的内容。您没有冗余,也没有关系。看起来很好。事实上,该表上没有太多要规范化的内容。您没有冗余,也没有关系。看起来很好
这个表已经正常化了吗
先是警告,然后是回答
警告
关系建模中的某些术语有非常具体的含义。规范化不是其中之一,至少当有人像你那样使用它时不是
问“这张表在3NF中吗?”,或者“这张表在5NF中吗?”,是有意义的,但问它是否正常化是没有意义的。仅凭这一点,你就可以找到“这是正常化的”意思的答案
- 它是3NF的
- 在5NF中
- 它有一个身份证号码
- 它只有不到20列
- 所有文本都已替换为id号
create table books (
isbn varchar(13) not null,
cover_type varchar(10) not null,
primary key (isbn, cover_type)
);
如果你这样做了,你就不会有非素数属性(所有列都是至少一个候选键的一部分),所以你至少有2NF。没有可传递的依赖项,所以你至少有3NF。没有多值依赖项,所以至少有4NF。根本没有连接依赖项,所以你至少有6NF,或者“终极范式”
在现实生活中,你会希望对这些列有更多的限制。我建议至少有两个
- 它是3NF的
- 在5NF中
- 它有一个身份证号码
- 它只有不到20列
- 所有文本都已替换为id号
create table books (
isbn varchar(13) not null,
cover_type varchar(10) not null,
primary key (isbn, cover_type)
);
如果你这样做了,你就不会有非素数属性(所有列都是至少一个候选键的一部分),所以你至少有2NF。没有可传递的依赖项,所以你至少有3NF。没有多值依赖项,所以至少有4NF。根本没有连接依赖项,所以你至少有6NF,或者“终极范式”
在现实生活中,你会希望对这些列有更多的限制。我建议至少有两个
如果只是导入,可以在导入之前编写一个外部程序来验证校验位。假设将添加更多行,您可以预期“精装本”和“平装本”等值将被复制。将它们移动到单独的表(如“CoverType”)中难道没有意义吗和ID上的联接?假设将添加更多行,您可以预期“精装本”和“平装本”等值将被复制。将它们移动到单独的表中(如“CoverType”和ID上的联接)是否有意义