Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 3NF一对一关系争议_Database_Database Design_Database Normalization_3nf - Fatal编程技术网

Database 3NF一对一关系争议

Database 3NF一对一关系争议,database,database-design,database-normalization,3nf,Database,Database Design,Database Normalization,3nf,我在尝试用3NF设计数据库时遇到了问题。3NF中的数据库具有以下特征: -它是第二范式。 -它的表只包含不可传递地依赖于主键的列 我在网上看到很多人声称,如果你有一对一的关系,你应该强烈地考虑为什么不只是一张桌子,但是我对3NF的理解只是为了做到这一点。这是我目前的数据库: 我曾尝试在3NF中创建此数据库,但到目前为止,我不确定是否正确拆分BOOK_STATS和BOOK_DETAILS表。我对它进行了分析,确定像文件类型和质量这样的东西根本不依赖于这本书,所以我不得不将它们分开。这是正确的还是我

我在尝试用3NF设计数据库时遇到了问题。3NF中的数据库具有以下特征: -它是第二范式。 -它的表只包含不可传递地依赖于主键的列

我在网上看到很多人声称,如果你有一对一的关系,你应该强烈地考虑为什么不只是一张桌子,但是我对3NF的理解只是为了做到这一点。这是我目前的数据库:
我曾尝试在3NF中创建此数据库,但到目前为止,我不确定是否正确拆分BOOK_STATS和BOOK_DETAILS表。我对它进行了分析,确定像文件类型和质量这样的东西根本不依赖于这本书,所以我不得不将它们分开。这是正确的还是我需要更深入地了解它们被拆分的原因?

将一个表拆分为多个具有相同主键的表既不会违反任何正常形式,也不会修复潜在的违规行为。通过考虑规范化尚未规范化的表所需的步骤,这很容易变得合理:所有这些方法都引入了主键不同于原始表主键的表。因此,引入具有相同主键的表不能是规范化步骤

我属于主张1-1关系应被视为合并到一个表的那一部分,除非有强烈的语义或物理原因将它们分开。但是,可能会对您的
图书详细信息
表提出以下问题:

  • “书”的概念可以指两件事:一个逻辑实体,即作者、标题、内容或物理实例。正如您的模型所示,文件中包含的书籍也有相同的区别。奥威尔的1984可能存在于多个文件中,一个质量良好的PDF文件,一个质量一般的epub文件,具有不同的文件大小。或者一本大书可能被分割成多个文件。我不知道您的模型和应用程序的用途,但我会尝试涵盖像这样的真实世界现象,因为稍后添加它们将影响应用程序的大部分,而且成本高昂。因此,我可以想象将您的
    book\u detail
    表转换为一个
    media
    表,该表与书籍具有1:n甚至m:n的关系

  • 对于
    文件质量
    文件类型
    是否有预定义的值范围,如“优秀、优秀、平庸、差”、“pdf、epub、txt等”?在这种情况下,这些值应该是另一个表的一部分,您的
    book
    book\u detail
    将只包含该表中的id作为外键


将一个表拆分为多个具有相同主键的表既不会违反任何规范形式,也不会修复潜在的违规行为。通过考虑规范化尚未规范化的表所需的步骤,这很容易变得合理:所有这些方法都引入了主键不同于原始表主键的表。因此,引入具有相同主键的表不能是规范化步骤

我属于主张1-1关系应被视为合并到一个表的那一部分,除非有强烈的语义或物理原因将它们分开。但是,可能会对您的
图书详细信息
表提出以下问题:

  • “书”的概念可以指两件事:一个逻辑实体,即作者、标题、内容或物理实例。正如您的模型所示,文件中包含的书籍也有相同的区别。奥威尔的1984可能存在于多个文件中,一个质量良好的PDF文件,一个质量一般的epub文件,具有不同的文件大小。或者一本大书可能被分割成多个文件。我不知道您的模型和应用程序的用途,但我会尝试涵盖像这样的真实世界现象,因为稍后添加它们将影响应用程序的大部分,而且成本高昂。因此,我可以想象将您的
    book\u detail
    表转换为一个
    media
    表,该表与书籍具有1:n甚至m:n的关系

  • 对于
    文件质量
    文件类型
    是否有预定义的值范围,如“优秀、优秀、平庸、差”、“pdf、epub、txt等”?在这种情况下,这些值应该是另一个表的一部分,您的
    book
    book\u detail
    将只包含该表中的id作为外键


NFs中“依赖”的含义是“功能依赖”,这意味着确定列的子程序总是与确定列的相同子程序一起出现。如果给定的图书id只有一个关联的文件类型,那么当在同一个表中时,文件类型取决于图书id。BCNF的规范化&以下涉及了解所有FD。如果您想讨论表的规范化,请提供原始表列和FD。在多个表上拆分真正的一对一关系的问题在于强制完整性所需的额外约束以及必须使用事务来遵守这些约束。但是,图表中的基数指示符似乎表明BOOKS表中的行可以存在,而BOOK_STATS或BOOK_DETAILS表中没有相应的行。如果这是真的,那么单独的表格是合理的。顺便说一下,如果BoojySTATS或BooGueDebug中的每一行属于一本书,请考虑使用BooGyID作为它们的主键。@ ReaNb考虑到1,您的评论有点奇怪。1:1的关系从不需要分解。2.如果book:stat或book:details为1:0或-1,则不可能有一个规范化的表来提供book\u stats或book\u details。(1:0或-1不是1:1。)@reaanb在这种情况下,一本书可以存在,但统计数据不存在,直到有人访问该书,并且详细信息不总是可用。如果我让book_id成为stats and details表t的主键