一般来说,我想知道如何根据主要数据的类型存储辅助数据。
这是现实世界的情况。将“学生”添加到我的数据库时,我想开始他们的推荐。这将通过引用名为“referrer”的表来完成,该表存储将出现在下拉框中的选项列表,如下所示:
+-------------+---------------+
| referrer_id | referrer |
+-------------+---------------+
| 1 | Student |
| 2 | Search Engine |
| 3 | Ad |
+-------------+---------------+
所以在学生的表格中,我会存储referrer_id - 足够简单。
根据选择,我希望用户能够输入辅助信息。例如,如果他们从列表中选择“学生”,则会出现第二个下拉框,向他们显示现有学生的列表,以便他们指定哪个学生是推荐人,我想存储student_id。如果他们选择“搜索引擎”,我会给他们一个文本框,在那里他们可以输入搜索引擎的名称,我会存储该文本。
所以我的问题是,为了保存这些信息,我应该如何构建“学生”表格,因为有时候我会存储student_id,或者在框中输入的文本,或者......?我最初的想法是在学生表中创建额外的列以保持各种可能性,但这似乎既凌乱又不可扩展,所以我不关心它。我想知道是否需要额外的交叉引用表,这将保留student_id,referrer_id,然后是一个值(例如引用student_id,或输入到文本框中的值)。或者也许代替“值”,我可以使用“value_id”,“value_text”等来获得不同的数据类型。此表中referrer_id的值将告诉我哪个列包含我想要的数据。虽然这看起来比扩大学生表更干净,但它看起来仍然有点混乱。
答案 0 :(得分:-1)
也许在引荐来源表格中,您有一个额外的参数列,表示您拥有的特定引荐来源的参数(对于学生,参数_1列可能是学生姓名)。然后,当在添加到学生表时序列化这些参数时,您可以使用简单的数组连接序列化类型及其参数。 (如果你选择了学生和学生John Doe,那么这个学生的推荐人可能是1 | John Doe |)