php - 数据库中许多主表的公共(public)子表

标签 php mysql database oop database-design

我正在使用 mysql 数据库和 php 来构建一个 Web 应用程序。

我有一个子表attachment,它是许多主表的公用表:teacherstudentclassRoom(和其他)。 主表数量超过 10 个,假设有 n 个表。

我的问题是,以下做法是否良好:

  1. 在数据库中创建一个名为“attachment”的表,并将其与其主表关联起来。
    这将导致附件表中有 n 个外键(即:n-1 个未使用的列),这也会导致模型中的 n-1 个属性在每次创建模型时都不会被初始化或使用。

  2. 为每个主表 (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/

相关文章:

php - 我无法使用 nginx 上传大于 1mb 的文件

javascript - 加载页面内容而不重新加载横幅

php - 摆脱未使用的 php 文件

mysql - 在CentOS7,无法启动MySQL

php - MySQL WHERE IN (SELECT id from ...) 最快的方法?

php - 选择我自己的想法以及 friend 的想法

mysql - 如何更改 MySQL DB 中所有表的前缀?

sql - 数据库(最大)字段长度会影响性能吗?

database - 在数据库中存储条件逻辑表达式/规则

php - mysql错误:Unknown column 'variable' in 'field list'