我对数据库很陌生。我正在使用MySql。
我所拥有的是一个学生系统,它为一所学校的学生储存规则。
每个学生可能是一个团体的一部分,也可能不是(足球,吉他等)。
不同的规则对学生个人和群体都有不同的规定。
学生桌:
|Student_id|Student_name|
|----------|------------|
| 1|Jack |
| 2|John |
| 3|Bob |
|----------|------------|组表:
|Group_id|Group_name|
|--------|----------|
| 1|Soccer |
|--------|----------|Student_group_table:
|Student_id|Group_id|
|----------|--------|
| 1| 1| --Jack plays soccer
| 2| 1| --John also plays soccer
|----------|--------| 规则(肮脏的设计):
|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
|--|---------|-----------|----------|我希望有一个更干净的替代这个肮脏的设计。
发布于 2015-07-20 15:02:24
@Thomas注释的另一种替代方法(这是可行的,尽管imo递归外键增加了太多的复杂性,如果您不需要它们提供的额外功能)将是为每种外键类型创建单独的表(一个用于学生,一个用于组),允许使用可执行的外键:
规则:
|id|rule |
|--|----------|
| 1|Bus at 7am| -- bus has to be caught at 7am
| 2|Shoes | -- shoes have to be brought
|--|----------|student_rules_table:
|Student_id|rule_id |
|----------|--------|
| 3| 1| --Bob has to follow rule 1
|----------|--------| group_rules_table:
|Group_id |rule_id |
|----------|--------|
| 1| 2| --All soccer students have to follow rule 2
|----------|--------|这也将导致不同规则的数目减少,因为这些规则不再依赖于任何连接实体。
https://softwareengineering.stackexchange.com/questions/290222
复制相似问题