我正在建立一个数据库来存储周围学校的学生姓名。我目前正在考虑所有学校的一张表,然后似乎下一个逻辑步骤是每所学校的一张表,问题是我不知道我需要做多少所学校。它很容易超过 200 个,看起来我最终会得到一个包含数百个表的数据库。设计一个为每个条目创建一个新表的数据库是否可以?
此外,您如何处理人们必须提交回复但回复的长度可能会有很大差异的情况。就像当您处理某人的电子邮件地址时,为每个地址分配 500 个字符似乎是一种浪费,但同时您知道肯定有一封电子邮件有 100 个字符。你会迎合最坏的情况还是有办法解决这个问题?
最佳答案
考虑对两个表使用一对多关系:
学校
- 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
- 学校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
关于php - 当数据大小不确定时,如何管理数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625787/