我正在建立一个数据库来存储周围学校的学生姓名。我现在正在考虑所有学校的一张桌子,然后看起来下一个合乎逻辑的步骤是每个学校的一张桌子,问题是我不知道我需要做多少所学校。它很容易超过200,看起来我最终会得到一个包含数百个表的数据库。是否可以设计一个数据库,为每个条目创建一个新表?
此外,您如何处理人们必须提交回复的内容,但响应的长度可能会有很大差异。就像你在处理别人的电子邮件地址一样,每个地址分配500个字符似乎是浪费,但与此同时,你知道那里肯定有一个100个字符的电子邮件。你是否迎合了最糟糕的情况,还是有办法解决这个问题?
答案 0 :(得分:1)
考虑使用与两个表的一对多关系:
<强>学强>
<强>学生强>
然后像这样的查询将起作用:
SELECT school.name, student.nameFirst, student.nameLast, student.email
FROM student
INNER JOIN school ON student.schoolID = school.id;
如果一名学生可以上多所学校,您将需要一个联络表:
<强>学强>
<强>学生强>
<强> studentSchool 强>
第三个表是一个促进多对多关系的联结表。许多学生可以参加零,一或多所学校。这样的查询将起作用:
SELECT school.name, student.nameFirst, student.nameLast, student.email
FROM studentSchool
INNER JOIN school ON studentSchool.schoolID = school.id
INNER JOIN student ON studentSchool.studentID = student.id;
关于字段长度,在大多数情况下,MySQL使用动态行大小,以便没有浪费的空间。如果您执行VARCHAR(255),则最多可以存储255个字符,但它只需要最小的存储空间(加上一些小的开销)来存储您的值。见http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
答案 1 :(得分:0)
我正在建立一个数据库来存储周围学校的学生姓名。我现在正在考虑所有学校的一张桌子,然后看起来下一个合乎逻辑的步骤是每个学校的桌子,问题是我不知道我需要做多少所学校。 / p>
右半:所有学校的一张桌子(以及有关他们的相关信息)。该表将有一个主键 - 一个自动递增的整数就可以了。
然后有一个学生表,其中Foreign Key列包含学生所在学校的ID。
只有两张桌子:一张用于学校,一张用于学生。与外键相关。或者,如果学生可以去多所学校,则需要join table。
你是否迎合了最糟糕的情况,还是有办法解决这个问题?
是。您希望您的应用程序适用于所有人,因此让它适用于所有人。