如果可能的话,我喜欢所有的显式数据。例如,我会创建单独的等级(5,6,7,8等)和等级ID(A,B,C等)字段。这有很多好处。例如:
- 查询所有五年级班级不会导致范围查询,如
SELECT * FROM table WHERE grade LIKE "5%";
会。
- 同样的事情:你可以很容易地查询所有的“B”类,而全扫描(假设你有正确的索引)
另一件事是在每年的类增量。 5B变为6B然后是7B。所以这很难找到你要找的课程。我会在现场创建一个开始。找到类“B”于2006年开始是容易的,明确的(再次明确的东西:))
我的建议是:
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;
海事组织,一所学校(?1000名学生)的最佳化可能是不值得,除非OP的一些报告要求非常复杂。 '数据库在全国范围内管理所有学校的好主意,尽管有数百万名学生'---)' – halfer