Mysql DB表创建--按年龄组细分

Mysql DB表创建--按年龄组细分,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我有一个家教网站,老师们根据他们潜在学生的年龄列出他们的偏好 到目前为止,我已将这些年龄分为以下几类: 0-4,5-9,10-14,15-19,成年人。我认为,这些类别代表了不同年龄段学生的良好突破点。但不管怎样,真正的问题是表的创建 我将制作一个二级表,teachers\u ages,外键表示teacher\u id,另一列表示age。我是否应该使用以下可接受的选项“0-4”、“5-9”、“10-14”、“15-19”、“成人”将此列作为枚举?。这是一种不好的做法(用单词分组数字?)吗?它是否

我有一个家教网站,老师们根据他们潜在学生的年龄列出他们的偏好

到目前为止,我已将这些年龄分为以下几类: 0-4,5-9,10-14,15-19,成年人。我认为,这些类别代表了不同年龄段学生的良好突破点。但不管怎样,真正的问题是表的创建

我将制作一个二级表,teachers\u ages,外键表示teacher\u id,另一列表示age。我是否应该使用以下可接受的选项“0-4”、“5-9”、“10-14”、“15-19”、“成人”将此列作为枚举?。这是一种不好的做法(用单词分组数字?)吗?它是否违反了任何数据库创建规范?有没有更好的方法来打破年龄组使用CRUD


更新:教师可以选择任意多个年龄组

如果每位教师只能选择一个年龄组,则无需添加第二个表。将“年龄组”字段放入教师表中。将数据类型设置为varchar,并对五个选项使用检查约束


您的方法是一种有效的方法,可以将组分解为人口统计数据,如年龄、收入、人口等。

通常,您会创建一个查找表,其中列出标识符和相关值。比如说

查找表(AGrange)

现在,您可以添加另一个具有教师id和年龄范围id的表。(此表中可以有多个条目,允许教师具有任意数量的首选项。)


验证时,请加入此表并查看最小年龄和最大年龄。报告时,请使用描述字段。

0?是的,我猜在教育方面没有什么意义。你有两个选择,第一个是(正如你所提到的)在定义每个年龄组时使用枚举字段,这很好,即使使用“成人”选项也是如此。但我可能会做的是创建一个age_groups表,每个组都在一个单独的行中,可以通过teacher表中的外键进行引用。这样做的好处是,您可以始终开发一个用于添加、删除和编辑年龄组的简单界面,以便管理员具有灵活性。另外,我不会将“15-19”归为数字,因为它有一个破折号,与“成人”没有区别。MySQL确实接受该语法,但从未强制执行该约束。(至于MySQL为什么接受这种语法,可能是为了提高与从另一个数据库导入的DDL的兼容性,也可能是为了文档。可以定义触发器来模拟检查约束。
ID     Min_Age   Max_Age   Description
1      0         4         "Less than 4"
2      5         9         "5 to 9"
3      10        14        "10 to 14"
4      15        19        "15 to 19"
5      20        1000      "Adults"