我正在使用mysql数据库和php构建一个web应用程序。
我有一个子表attachment,它是许多主表的常用表:teacherstudentclassRoom(和其他表)。
主表的数量超过10,比如说n个表。
我的问题是,这是一个好的做法:
在数据库中只创建一个名为“attachment”的表,并将其与主表关联。
这将导致附件表中有n个外键(即:n-1个未使用的列),这也将导致模型中的n-1个属性,而不会在每次创建模型时初始化或使用。
为每个主表(master_i)创建一个名为(master_i_attachment)的表,并将其仅与其主表关联。但这将导致在我的代码中有n个附件表和n个附件模型。
有什么建议吗?

最佳答案

您可以做的是让一个表具有以下字段:id、reference_id(您的父表之一)、reference_type(即reference_id所属的表),(附件表中的所有其他字段)。
然后,例如,如果要获取特定父类型的附件,则可以对该类型运行选择查询筛选,例如where reference_type=“classroom”。
或者,如果您想获取具有特定ID的教室附件:

SELECT * FROM attachment WHERE reference_id=<ID> AND reference_type = 'classroom';

您可能希望在上有一个复合唯一键(reference_id,reference_type),这将确保不会得到重复的附件(除非您希望给定类型的给定id有可能有多个附件,在这种情况下,该键不应是唯一的)。
此解决方案是否适合您的需要取决于您将如何使用数据,即您将最常运行的查询类型。

10-04 15:52