可能であれば、どこでも明示的なデータが好きです。たとえば、個別のグレード(5、6、7、8など)フィールドとグレードID(A、B、Cなど)フィールドを作成します。これには多くの利点があります。例えば:
- すべての5年生のクラスをクエリしても、範囲クエリは発生しません
SELECT * FROM table WHERE grade LIKE "5%";
。
- 同じこと:フルスキャンなしですべての「B」クラスを簡単にクエリできます(適切なインデックスがある場合)
もう1つは、クラスは毎年増加するということです。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;