0

我正在寻找建立一个数据库来存储周围学校的学生姓名。我目前正在考虑所有学校的一张表,然后看起来下一个合乎逻辑的步骤是每所学校的一张表,问题是我不知道我需要做多少所学校。它很容易超过 200 个,看起来我最终会得到一个包含数百个表的数据库。可以设计一个数据库,为每个条目创建一个新表吗?

此外,您如何处理人们必须提交回复但回复的长度可能会有很大差异的事情。就像当您处理某人的电子邮件地址时,为每个地址分配 500 个字符似乎是一种浪费,但同时,您知道肯定有一封电子邮件是 100 个字符。你会迎合最坏的情况还是有办法解决这个问题?

4

2 回答 2

1

考虑对两个表使用一对多关系:

学校

  • ID
  • 姓名
  • ...

学生

  • ID
  • 学校ID
  • 姓名第一
  • 姓名姓氏
  • 电子邮件
  • ...

然后这样的查询会起作用:

SELECT school.name, student.nameFirst, student.nameLast, student.email
FROM student
INNER JOIN school ON student.schoolID = school.id;

如果一个学生可以上多所学校,您将需要一个连接表:

学校

  • ID
  • 姓名
  • ...

学生

  • ID
  • 姓名第一
  • 姓名姓氏
  • 电子邮件
  • ...

学生学校

  • 学生卡
  • 学校ID

第三个表是促进多对多关系的联结表。许多学生可能上零所、一所或多所学校。像这样的查询将起作用:

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

于 2013-10-28T01:31:13.383 回答
0

我正在寻找建立一个数据库来存储周围学校的学生姓名。我目前正在考虑所有学校的一张表,然后看起来下一个合乎逻辑的步骤是每所学校的一张表,问题是我不知道我需要做多少所学校。

对了一半:一张桌子,上面有所有学校(以及有关它们的相关信息)。该表将有一个主键——一个自动递增的整数就可以了。

然后有一个学生表,其中包含一个外键列,其中包含学生就读的学校的 ID。

只有两张桌子:一张给学校,一张给学生。与外键相关。或者,可选地,如果学生可以去多所学校,则需要一个连接表

你会迎合最坏的情况还是有办法解决这个问题?

是的。您希望您的应用程序适用于所有人,所以让它适用于所有人。

于 2013-10-28T01:25:44.163 回答