我正在使用 mysql 数据库和 php 来构建一个 Web 应用程序。
我有一个子表attachment
,它是许多主表的公用表:teacher
、student
、classRoom
(和其他)。
主表数量超过 10 个,假设有 n 个表。
我的问题是,以下做法是否良好:
在数据库中创建一个名为“attachment”的表,并将其与其主表关联起来。
这将导致附件表中有 n 个外键(即:n-1 个未使用的列),这也会导致模型中的 n-1 个属性在每次创建模型时都不会被初始化或使用。为每个主表 (master_i) 创建一个名为 (master_i_Attachment) 的表,并将其仅与其主表关联。但这将导致我的代码中出现 n 个附件表和 n 个附件模型。
有什么建议吗?
最佳答案
您可以做的是只拥有一个包含以下字段的表:id,reference_id(您的父表之一),reference_type(即reference_id属于哪个表),(附件表中的所有其他字段) .
然后,例如,如果您想获取特定父类型的附件,您可以对该类型运行 SELECT 查询过滤,例如WHERE Reference_type='类'。
或者,如果您想获取具有特定 ID 的教室的附件:
SELECT * FROM attachment WHERE reference_id=<ID> AND reference_type = 'classroom';
您可能希望在(reference_id,reference_type)上有一个复合唯一键,这将确保您不会获得重复的附件(除非您希望给定类型的给定 ID 可能具有多个附件) ,在这种情况下,键不应该是唯一的)。
此解决方案是否适合您的需求取决于您将如何使用数据,即您将最常运行哪种查询。
关于php - 数据库中许多主表的公共(public)子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345504/