首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库设计:学生和学生群体的规则

数据库设计:学生和学生群体的规则
EN

Software Engineering用户
提问于 2015-07-20 14:01:49
回答 1查看 252关注 0票数 1

我对数据库很陌生。我正在使用MySql。

我所拥有的是一个学生系统,它为一所学校的学生储存规则。

每个学生可能是一个团体的一部分,也可能不是(足球,吉他等)。

不同的规则对学生个人和群体都有不同的规定。

学生桌:

代码语言:javascript
复制
|Student_id|Student_name|
|----------|------------|
|         1|Jack        |
|         2|John        |
|         3|Bob         |
|----------|------------|

组表:

代码语言:javascript
复制
|Group_id|Group_name|
|--------|----------|
|       1|Soccer    |
|--------|----------|

Student_group_table:

代码语言:javascript
复制
|Student_id|Group_id|
|----------|--------|
|         1|       1|   --Jack plays soccer
|         2|       1|   --John also plays soccer
|----------|--------|   

规则(肮脏的设计):

代码语言:javascript
复制
|id|entity_id|entity_type|rule      |
|--|---------|-----------|----------|
| 1|        3|student    |Bus at 7am| --Bob has to catch bus at 7am
| 2|        1|group      |Shoes     | --All soccer students must bring shoes
|--|---------|-----------|----------|

我希望有一个更干净的替代这个肮脏的设计。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2015-07-20 15:02:24

@Thomas注释的另一种替代方法(这是可行的,尽管imo递归外键增加了太多的复杂性,如果您不需要它们提供的额外功能)将是为每种外键类型创建单独的表(一个用于学生,一个用于组),允许使用可执行的外键:

规则:

代码语言:javascript
复制
|id|rule      |
|--|----------|
| 1|Bus at 7am| -- bus has to be caught at 7am
| 2|Shoes     | -- shoes have to be brought
|--|----------|

student_rules_table:

代码语言:javascript
复制
|Student_id|rule_id |
|----------|--------|
|         3|       1| --Bob has to follow rule 1
|----------|--------|   

group_rules_table:

代码语言:javascript
复制
|Group_id  |rule_id |
|----------|--------|
|         1|       2| --All soccer students have to follow rule 2
|----------|--------|

这也将导致不同规则的数目减少,因为这些规则不再依赖于任何连接实体。

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

https://softwareengineering.stackexchange.com/questions/290222

复制
相关文章

相似问题

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