【发布时间】:2011-09-23 03:59:07
【问题描述】:
我希望用户能够选择他们的专业。
例如,A 可以选择计算机科学、数学和历史作为他的专业。用户可以选择任意数量的专业。
我的数据库中有一个组织列表,这些组织只接受特定专业的学生。例如,组织 A 只接受计算机科学和数学专业的学生。组织可以选择任意数量的专业。
我想为学生匹配适合他们专业的组织。例如,我想在数据库中搜索接受一个或多个 Person 的 A 专业的组织,这些专业是计算机科学、数学和历史。接受全部或大部分 Person 的 A 专业的组织将被列在首位。因此,如果组织 B 接受人员 A 的所有三个专业,但组织 A 只接受人员 A 的两个专业,则组织 B 将首先列出。
如何将组织接受的专业存储在mysql数据库中?如何存储学生的专业,以实现学生信息和组织信息的高效匹配?
我正在考虑将组织接受的所有专业作为序列化值存储在数据库中。
所以我有两张桌子
组织
ID 整数
名称 varchar(255)
majors_accepted blob
学生
ID 整数
名称 varchar(255)
专业blob
我可以将组织接受的专业作为序列化值存储在majors_accepted blob 中。该领域可能有超过 1 个专业。
或者我可以将学生正在考虑的专业作为序列化值存储在学生表的专业字段中。该领域可能有超过 1 个专业。然后我想我可以遍历组织表中的所有行,并将每个专业的接受字段与学生数据进行比较。但这似乎效率低下……
【问题讨论】:
-
您可以有另一个名为 Majors 的表,然后是 ObjectToMajors(或 StudentToMajors 和 OrganizationToMajors)的表,它将学生的 ID 链接到专业的 ID。如果您将两列(StudentId 和 MajorId)都设为键,那么您可以确保每个学生只能拥有每个专业中的一个(这是有道理的,不能成为一个专业的成员两次)。如果您使用 ObjectToMajor,则需要有一个字段来指定 ObjectId 是学生还是组织(这样您就知道如何关联数据)。
标签: php mysql sql database-design