如果可能的話,我喜歡所有的顯式數據。例如,我會創建單獨的等級(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