首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何构造我的数据库,以停止有这么多的表?

我应该如何构造我的数据库,以停止有这么多的表?
EN

Stack Overflow用户
提问于 2012-11-14 05:24:14
回答 2查看 213关注 0票数 2

好的,所以我有一个网站正在进行中,将允许用户使用提供的一组练习来建立例程。他们可以在自己创建和命名的例程中添加一些练习。

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

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

我怎样才能将“routines”和“练习”联系起来,因为“routines”必须是一个以上的表,因为如果你想象一个用户创建了“二头肌”程序,并在其中填充了练习。然后,他创造出“三头肌”,并在其中进行练习。然后,他必须有两个常规的表,称为‘二头肌’和‘三头肌’。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 05:31:06

代码语言:javascript
复制
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
);
票数 1
EN

Stack Overflow用户

发布于 2012-11-14 05:30:15

您不希望有两个routines表。

您需要一个 routines表,外加一个引用routines表的exercises表。

取决于一个例程是否对所有用户都相同,或者每个用户是否可以有自己版本的“二头肌”例程,也许您还需要一个表。

看看下面的例子吧!

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

用户表:

代码语言:javascript
复制
UserId  Name
----------------
1       Joe
2       Bill

例程表:

代码语言:javascript
复制
RoutineId   Name     UserId
-------------------------------
1           biceps   1
2           biceps   2

练习表:

代码语言:javascript
复制
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(只有一个“二头肌”例程,并且对所有用户都是相同的):

用户表:

代码语言:javascript
复制
UserId  Name
----------------
1       Joe
2       Bill

例程表:

代码语言:javascript
复制
RoutineId   Name  
------------------
1           biceps

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

代码语言:javascript
复制
UserId   RoutineId
--------------------
1        1
2        1

练习表:

代码语言:javascript
复制
ExerciseId    RoutineId  Name
--------------------------------------------------------
1             1          first exercise of routine 1
2             1          second exercise of routine 1

编辑:

你说过:

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

和:

每个练习应该能够多次使用。也就是说,我可能会在“背部锻炼”和“手臂锻炼”中进行“引体向上”锻炼。

最终解决方案:

用户表:

代码语言:javascript
复制
UserId  Name
----------------
1       Joe
2       Bill

例程表:

代码语言:javascript
复制
RoutineId   Name                    UserId
-----------------------------------------------------
1           Joe's back workout      1
2           Joe's arm workout       1
3           Bills's back workout    2

“全局”练习表:

代码语言:javascript
复制
ExerciseId    Name
--------------------------------------------------------
1             pull up
2             whatever

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

代码语言:javascript
复制
RoutineId  ExerciseId
----------------------------------
1          2
2          1
3          1

这样,“引体向上”练习是在乔的手臂锻炼(例程2)和比尔的背部锻炼(例程3),但不是在乔的背部锻炼(例程1)。

“随便”套路只在乔的背部锻炼(套路1)。

这是你想要的吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13369050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档