我正在构建一个允许用户记录 6 周内每周事件的应用程序。每周有 3 个基准记录,这里是一个例子:
Week 1
+------------+-----------+------------+-----------+
| Day | Minutes | Location | Miles |
+------------+-----------+------------+-----------+
| Monday | | | |
+------------+-----------+------------+-----------+
| Tuesday | | | |
+------------+-----------+------------+-----------+
| Wednesday | | | |
+------------+-----------+------------+-----------+
| Thursday | | | |
+------------+-----------+------------+-----------+
| Friday | | | |
+------------+-----------+------------+-----------+
| Saturday | | | |
+------------+-----------+------------+-----------+
| Sunday | | | |
+------------+-----------+------------+-----------+
每周重复一次,最多 6 周。
在我的平面表中,我有以下内容:
用户ID |用户名 |第 1 天 1 分钟 |第 1 周第 1 天地点 |第 1 天 1 英里 |第 1 天 2 分钟 |第 1 周第 2 天地点 |第 1 天 2 英里 ETC...
一周 X 7,然后 6 周 X 6。
我想弄清楚我的消去点在哪里,以及我的单独表格是什么。到目前为止,我有以下内容:
User Table
+------------+-----------+
| UserID | Username |
+------------+-----------+
| | |
+------------+-----------+
Activity Table
+------------+-----------+------------+-----------+------------+-----------+
| UserID | WeekID | Day | Minutes | Location | Miles |
+------------+-----------+------------+-----------+------------+-----------+
| | | | | | |
+------------+-----------+------------+-----------+------------+-----------+
Weeks Table
+------------+-----------+------------+
| UserID | WeekID | Week_No |
+------------+-----------+------------+
| | | |
+------------+-----------+------------+
我认为我的思路是正确的,但周表似乎不正确,我不确定它们之间的关系是什么 - 我认为我不需要在每个表中使用 UserID,而且我不确定PK 应该是什么。
非常感谢对此模式的任何评论,或在给定应用程序要求的情况下实现第一范式的有效方法,非常感谢。
编辑:
非常感谢所有的答案,很棒的东西。
我认为拥有位置表会很有用,因为我可以标准化位置(可以提供可供选择的列表),如果我需要基于位置进行查询,我将拥有一致的位置名称。
将架构修改为:
User Table - UserID PK
+------------+-----------+
| UserID | Username |
+------------+-----------+
| | |
+------------+-----------+
Activity Table - ActivityID PK
+------------+-----------+------------+-----------+------------+-------------+-----------+
| ActivityID | UserID | Week_No | Day | Minutes | LocationID | Miles |
+------------+-----------+------------+-----------+------------+-------------+-----------+
| | | | | | | |
+------------+-----------+------------+-----------+------------+-------------+-----------+
Location Table - LocationID PK
+------------+---------------+
| LocationID | Location_Name |
+------------+---------------+
| | |
+------------+---------------+
第二次编辑:
我现在有一个关于这个主题的 2NF 和 3NF 的问题:
MySQL - moving from 1st Normal Form to 2nd and 3rd Normal Forms
最佳答案
添加一个Location
表并将Location
更改为LocationID
(PK)。 Weeks
表中不需要 UserID
。您可以通过查询 Activity
表找到用户的周数。
如果 Week_No
被用户更改,我只看到需要一个 Week
表,这似乎没有太大意义。否则,您可以将 Activity
表中的 WeekID
替换为 WeekNo
,并删除 Weeks
表。
关于MySQL - 从平面表移动到第一范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3459839/