我有两个不同的表,我不确定从第一个正常形式到第二个正常形式的最佳方法。第一个表保存用户信息,第二个表是与帐户关联的产品。如果我这样做,我知道它只在NF1中,User_ID的外键将在表2中重复多次。见下表。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<div class="col-md-6">
<label for="exampleSelect1">Number of Divisions</label>
<select class="form-control" id="selectDiv" name="select" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</div>
<div class="col-md-6" id="test">
</div>
这是一个更好的方法来制作不重复用户ID的表2吗?我曾想过在每个用户的数据库中都有一个单独的表,但是从我在StackOverFlow上读到的所有其他问题来看,这不是一个好主意。
我正在使用的约束是1-1000个用户,而表2将为每个用户提供大约1-1000个索引。有没有更好的方法来创建这组表?
答案 0 :(得分:0)
我没有看到NF2被侵犯。它声明:
如果表格在1NF中,则表格在2NF中,并且非主要属性不依赖于表格中任何候选键的任何正确子集。
引自维基百科文章“第二范式”,2016-11-26
表2只有一个候选键,即主键。主键只包含一列。因此,候选键没有适当的子集。因此,除非不满足NF1,否则不能违反NF2。
答案 1 :(得分:0)
你说“制作不重复用户ID的表2”
然后你为什么不这样做
Table 1
|User_ID (primary)| Name | Address | Email | Username | Password | Product_ID ( Foreign Key nullable)|
Table 2
| Product_ID (Primary Key)|
答案 2 :(得分:0)
多次出现的值没有任何问题。当两个语法上不等同的查询都返回相同的值时,就会出现冗余。只有不受控制的冗余才是坏事。规范化通过将表替换为与其连接的较小的表来控制一些冗余。
规范化独立于其他表分解表。(我们将数据库的正常形式定义为其所有表所在的最低范式。)外键与违反无关正常形式。
了解表格在给定的正常形式下的含义。您需要学习定义。以及它使用的术语的定义。以及他们使用的术语的定义。等等A table is in 2NF when every non-prime column has a functional dependency that is full on every candidate key.还学习将表分解为给定正规形式的组件的算法。假设这些表可以容纳多个行,因此{}不是候选键,这两个表都是2NF。
2NF中的表也是1NF。因此您不希望“将其从第一个普通表格中删除”。
2NF并不重要。在处理功能依赖时,重要的是BCNF,它尽可能分解但需要某些成本较高的约束,而3NF则不会像可能但需要某些低成本限制。