php - 规范化一个简单的 SQL 表

标签 php mysql sql-server database database-normalization

我有两个不同的表,我不确定将其从第一范式转换为第二范式的最佳方法。第一个表包含用户信息,而第二个表是与帐户关联的产品。如果我这样做,我知道它只在 NF1 中,并且 User_ID 的外键将在表 2 中重复多次。请参见下表。

Table 1
|User_ID (primary)| Name | Address | Email | Username | Password |

Table 2
| Product_ID (Primary Key) | User_ID (Foreign Key) |

这是制作用户 ID 不重复的表二的更好方法吗?我考虑过在数据库中为每个用户创建一个单独的表,但从我在 StackOverFlow 上阅读的所有其他问题来看,这不是一个好主意。

我使用的约束是 1-1000 个用户,表二每个用户大约有 1-1000 个索引。有没有更好的方法来创建这组表?

最佳答案

我没有看到违反 NF2。它指出:

a table is in 2NF if it is in 1NF and no non-prime attribute is dependent on any proper subset of any candidate key of the table.

引自维基百科文章“第二范式”,2016-11-26

表2只有一个候选键,主键。主键仅包含一列。因此,不存在候选键的适当子集。因此,除非不满足 NF1,否则不能违反 NF2。

关于php - 规范化一个简单的 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820697/

相关文章:

php - 是否可以根据 PHP 中的命名空间自动加载文件?

sql-server - Sql Server( Entity Framework ): created_at , Updated_at 列

mysql - 内存中 SQL/NoSQL - 保持查询能力 - 可能使用 MySQL 或 SQL Server

java - 使用 Oracle SEQUENCES 和 SQL-Server IDENTITIES 生成 Hibernate id

php - 从 PHP 上传多个文件到 Amazon S3

php - 表单元素与适配器中的 Zend_File_Transfer setDestination

mysql - 删除行: No Single Member Has More Than x Records

mysql - MySql 两个表上的 Sql Join 语法

php - 通过具有幂等性的 Ansible 安装 PHP Pear 包

mysql - 如何在spring hibernate注释中查找mysql中的外键引用