php - 在表中使用多个外键

标签 php mysql sql

我有这些表

客户端

id(PK), name, logo

学校

id(PK), name, logo, client_id (FK)

id(PK), name, school_id (FK)

主题

id(PK), name, class_id (FK)

方法 1。

我有科目id,我需要得到科目的class_id、school_id和client_id。我可以使用 JOIN 编写查询以从客户、学校、类(class)表中获取 ID

方法二

我有这样的表格设计

客户端

id(PK), name, logo

学校

id(PK), name, logo, client_id (FK)

id(PK), name, school_id (FK), client_id (FK)

主题

id(PK), name, class_id (FK), class_id (FK), school_id (FK), client_id (FK)

在这种情况下,我可以通过一个简单的查询来获取所有详细信息

SELECT * FROM Subject WHERE id = '2'

哪一个是更好的推荐方法?我喜欢第二种方法,但不确定是否推荐它。

TIA

最佳答案

在性能方面,第二种方法在 SELECT 时更好。这完全取决于您需要多少 ID。在编程结构上也是一样的。我是否需要指向父结构的指针?这取决于我们将拥有的操作类型。权衡是空间和同步化,在大多数情况下这不是问题,因为主键是唯一标识符。

我会混合它。我不会像你那样放置所有外键。 Class 表是否需要 client_id?在你的情况下,我会在 Subject 中使用外键,但如果性能不是问题,我会使用连接。

还要注意表 Subject 中的 school_id 和 client_id 是外键。

关于php - 在表中使用多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130982/

相关文章:

php - 为 php 应用程序预构建的登录/身份验证组件?

php - 在 php 中对热门书籍的数组进行排序

php - 如何使用 PHP 在 mysql 中编写以下查询

mysql - 在 Restful Web 服务中使用 Hibernate 的 SQL 查询

php - 从 Woocommerce 3.4+ 中“我的帐户编辑地址”字段中删除(可选)文本

php - 表连接上的 UNION ALL

php - MySQL 存储过程忽略 DELETE 语句

MySQL RAND() 奇怪的行为

mysql - 如何从多个表中求和多个计数

Python 在每一列中计数和分组 0's and 1' s