好的,我有2张桌子。具有主键book_id和另一个称为标题的字段的书表。还有一个作者表,主键为author_id,字段为first_name,last_name和外键book_id。
我的设计是否符合2NF?
答案 0 :(得分:3)
一般而言(以外行人的名义),第一级的标准化意味着:
对于2NF,您有额外的约束,即每列依赖于整个键(直接或间接通过另一个非键列)。
所以我认为在这种情况下它符合2NF,因为它符合1NF的标准,而且书确实取决于作者。
然而,它仍然不一定是一个好的设计,特别是因为你应该总是从3NF开始,作为一般规则。一个更好的解决方案将是全面爆发:
books:
book_id
title
authors:
author_id
name
books_and_authors:
book_id
author_id
这样,你就会在书籍和作者之间建立多对多(包括零)的关系。
答案 1 :(得分:1)
一个表在2NF中,当且仅当它在1NF中并且非主要属性不依赖于表的任何候选键的任何适当子集(来自wikipedia)。
我必须假设你的桌子是1NF 您的候选(和主要)键是book_id和author_id。
您的非素数属性为标题, first_name 和 last_name 。这些属性都不依赖于候选键的任何适当子集(由于它们没有任何子集,因此很容易实现)。这种设计的唯一问题是外键 book_id 使书籍作者成为1:1的关系(即一本书 - >一位作者。一位作者 - >一本书)。这可以通过一个包含 book_id 和 author_id
的新表轻松修复1NF(也wikipedia):
我们如何使用它来构建关系数据库。