2

好的,所以我正在开发一个网站,该网站将允许用户使用提供的一组练习列表来构建例程。他们可以将许多练习添加到他们将自己创建和命名的例程中。

所以我想我应该有一个用户表。每个用户将有许多例程。每个例程都会有一些练习。

因此,我将有 3 个表:用户、例程和练习

我如何将“例程”和“练习”联系起来,因为“例程”必须不止一张表,因为如果您想象用户创建“二头肌”例程并用练习填充它。然后他创建“三头肌”并用练习填充它。然后,他将必须有两个常规表,称为“二头肌”和“三头肌”。

那么如何构建我的数据库以适应这种情况呢?

记住每个用户都有一个唯一的 ID 每个练习都有一个唯一的 ID,每个例程都有一个唯一的 ID。

4

2 回答 2

3

你不想有两张routines桌子。
您需要一个 routines表,以及一个exercises引用该表的routines表。

取决于一个例程是否对所有用户都相同,或者每个用户是否可以拥有自己版本的“二头肌”例程,也许您需要多一张桌子。
看看下面的例子!


示例 1(每个用户都可以有自己的“二头肌”例程):

用户表:

UserId  Name
----------------
1       Joe
2       Bill

例程表:

RoutineId   Name     UserId
-------------------------------
1           biceps   1
2           biceps   2

练习表:

ExerciseId    RoutineId  Name
--------------------------------------------------------
1             1          first exercise of routine 1
2             1          second exercise of routine 1
3             2          first exercise of routine 2
4             2          second exercise of routine 2

示例 2(只有一个“二头肌”例程,对所有用户都一样):

用户表:

UserId  Name
----------------
1       Joe
2       Bill

例程表:

RoutineId   Name  
------------------
1           biceps

用户 <--> 例程链接表:

UserId   RoutineId
--------------------
1        1
2        1

练习表:

ExerciseId    RoutineId  Name
--------------------------------------------------------
1             1          first exercise of routine 1
2             1          second exercise of routine 1

编辑:

你说:

是的,例程对每个用户都是私有的,因为他们创建了它们。它们不共享

和:

每个练习应该能够使用不止一次。即我可能在我的“背部锻炼”程序和我的“手臂锻炼”程序中进行“引体向上”运动

最终解决方案:

用户表:

UserId  Name
----------------
1       Joe
2       Bill

例程表:

RoutineId   Name                    UserId
-----------------------------------------------------
1           Joe's back workout      1
2           Joe's arm workout       1
3           Bills's back workout    2

“全局”练习表:

ExerciseId    Name
--------------------------------------------------------
1             pull up
2             whatever

例程 <--> 练习链接表:

RoutineId  ExerciseId
----------------------------------
1          2
2          1
3          1

这样,“引体向上”锻炼出现在 Joe 的手臂锻炼(例程 2)和 Bills 的背部锻炼(例程 3)中,但不在 Joe 的背部锻炼(例程 1)中。
“随便”例行程序仅在 Joe 的背部锻炼(例行程序 1)中。

这是你想要的吗?

于 2012-11-13T21:30:15.150 回答
1
create table users(
userid int not null AUTO_INCREMENT PRIMARY KEY,
firstname char(30) not null,
lastname char(30) not null
);

create table routines(
rid int not null AUTO_INCREMENT PRIMARY KEY,
userid int not null,
rname char(30) not null
);

create table execises(
eid int not null AUTO_INCREMENT PRIMARY KEY,
rid int not null,
ename char(30) not null
);
于 2012-11-13T21:31:06.070 回答