【问题标题】:How to manage data in a database when the data is of indeterminate size?当数据大小不确定时如何管理数据库中的数据?
【发布时间】:2013-10-28 01:14:06
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    学校

    • 身份证
    • 姓名
    • ...

    学生

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

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

    SELECT school.name, student.nameFirst, student.nameLast, student.email
    FROM student
    INNER JOIN school ON student.schoolID = school.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

    【讨论】:

    • 啊,这很有意义。好的,还有一个问题。对于每个学生来说,他们可以去不止一所学校。他们可以参加的人数没有限制,我不知道最坏的情况。我该如何应对?
    • 我更新了答案以包含有关多对多关系的信息,我相信这可以解决您的问题。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多