我对以下情况下如何查看我的Mysql数据库感到困惑,尽管我研究了其他一些解决方案。
在学校里,孩子们被分到了班级。例如,最小的等级是5级,第二级是第6级,依此类推,最后一级是第8级。每个班级有大约20名学生,因为每个年级的学生人数大约是100,所以形成了几个班级,标识符用于唯一识别班级(例如:5年级班级:5A,5B,5C,5D, 5E)。每年,课程都会提升到下一个增量等级。所以第5级变为第6级,依此类推。
请帮我提一下数据库设计的想法/提示。
答案 0 :(得分:0)
为学生(学生)创建一个表,为类(Classes)创建一个表,并将它们链接到... classId。该等级不会成为该表中的主键,因此当年份通过时,您将能够通过更改classId来更新它。
mysql> create table Classes (classId int, grade varchar(5), primary key(classId));
Query OK, 0 rows affected (0.00 sec)
mysql> create table Students (studentId int, name varchar(30), classId int, primary key(studentId), foreign key (classId) references Classes(classId));
Query OK, 0 rows affected (0.01 sec)
答案 1 :(得分:0)
如果有可能的话,我喜欢到处都有明确的数据。例如,我将创建单独的等级(5,6,7,8等)和等级id(A,B,C等)字段。这有很多好处。例如:
SELECT * FROM table WHERE grade LIKE "5%";
那样的范围查询。其他事情是每年课程增加。 5B变为6B然后变为7B。所以这很难找到你正在寻找的课程。我会在现场创建一个开始。找到2006年开始的类“B”是简单明了的(再次显式的东西:))
我的建议是:
CREATE TABLE school_class (
id smallint unsigned NOT NULL AUTO_INCREMENT,
start_in smallint unsigned NOT NULL,
grade tinyint unsigned NOT NULL,
grade_id CHAR(1),
PRIMARY KEY (id)
) ENGINE=InnoDB;
CREATE TABLE student (
id mediumint unsigned NOT NULL AUTO_INCREMENT,
class_id smallint unsigned NOT NULL,
name VARCHAR(255),
PRIMARY KEY (id),
FOREIGN KEY (class_id) references school_class(id)
) ENGINE=InnoDB;