当数据具有不确定的大小时,如何管理数据库中的数据?

时间:2013-10-28 01:14:06

标签: php mysql database database-design relational-database

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

此外,您如何处理人们必须提交回复的内容,但响应的长度可能会有很大差异。就像你在处理别人的电子邮件地址一样,每个地址分配500个字符似乎是浪费,但与此同时,你知道那里肯定有一个100个字符的电子邮件。你是否迎合了最糟糕的情况,还是有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

<强>学

  • id
  • 名称
  • ...

<强>学生

  • ID
  • schoolID
  • nameFirst
  • nameLast
  • 电子邮件
  • ...

然后像这样的查询将起作用:

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

如果一名学生可以上多所学校,您将需要一个联络表:

<强>学

  • id
  • 名称
  • ...

<强>学生

  • ID
  • nameFirst
  • nameLast
  • 电子邮件
  • ...

<强> studentSchool

  • studentID
  • schoolID

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

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

  

你是否迎合了最糟糕的情况,还是有办法解决这个问题?

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