多属性数据库设计混淆

时间:2013-12-02 05:30:38

标签: sql database database-design relational-database

亲爱的社区成员 我需要帮助设计一个简单的数据库。它是学生和学校的数据库。同一所学校有多名学生,一名学生可以加入多所学校。我想知道最好的方法是什么。

示例场景:用户john作为高中毕业的BI学校和麻省理工学院的大学,用户哈里去了麻省理工学院作为大学。

我们可以采取的一种方法是: 我们可以有一个db表

用户表

+--------+-------+-----------+
| usr_id | name  | school_id |
+--------+-------+-----------+
|      7 | john  |         1 |
|      7 | john  |         2 |
|      6 | harry |         1 |
+--------+-------+-----------+

学校表

+-----------+-----------+
| school_id |   name    |
+-----------+-----------+
|         1 | MIT       |
|         2 | BI School |
+-----------+-----------+

并在用户表中使用school_id作为外键。

另一种方法是:

用户表

+--------+-------+
| usr_id | name  |
+--------+-------+
|      7 | john  |
|      7 | john  |
|      6 | harry |
+--------+-------+

学校表

+-----------+-----------+
| school_id |   name    |
+-----------+-----------+
|         1 | MIT       |
|         2 | BI School |
+-----------+-----------+

用户到学校表

+----+---------+-----------+
| id | user_id | school_id |
+----+---------+-----------+
|  1 |       7 |         1 |
|  2 |       7 |         2 |
|  3 |       6 |         1 |
+----+---------+-----------+

哪种方法最好?我们可以在这里尝试其他方法。

1 个答案:

答案 0 :(得分:0)

根据规范化规则,您有多对多关系(一个学生可以就读一个或多个学校,一个学校可以有一个或多个学生),第二种方法是正确的。

此处有更多信息StackOverflow - Normalization in Plain English