mysql - 设置子祖 parent 关系

标签 mysql sql database

我构建了一个网络应用程序 (PHP/MySQL) 供人们预测足球比赛。

  • 对于 leagues 表中的每个条目,matches 表中有许多条目。
  • 对于 matches 表中的每个条目,predictions 表中有许多条目。

我应该显式设置从 predictions 表到 leagues 表的关系吗?换句话说,我是否应该将 league_id 列添加到 predictions 表中?

专业版

更简单的查询,在某些情况下需要读取的表更少。从具有关系的特定联盟中查找某人预测的示例查询:

SELECT * FROM predictions p
WHERE p.league_id:league_id AND p.user_id=:user_id

没有关系:

SELECT * FROM predictions p
INNER JOIN matches m ON m.match_id=p.match_id AND m.league_id=:league_id
WHERE p.user_id=:user_id

反对

它是已经存在的数据,所以它是重复数据(使数据库更大)。

最佳答案

数据库的正确规范化应该避免重复首先是要避免使用冗余数据来避免关系。毫无疑问,您应该更喜欢第二个查询 Theproposed 和相关模式

SELECT * FROM predictions p
INNER JOIN matches m ON m.match_id=p.match_id AND m.league_id=:league_id
WHERE p.user_id=:user_id

关于mysql - 设置子祖 parent 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38812265/

相关文章:

mysql - MYSQL 中 IF 内的 SET(?)

c++ - 使用基于签名的技术编写防病毒软件

iphone - 从 iOS 的 WebService(Json/XML) 同步数据库 (sqlite)

database - 设计数据库的正确方法

php - 根据第二个表的列数比较两个表结果

mysql - hibernate ,mysql

mysql - 创建数据库时在 Node 中转义 MySQL 的问题

mysql - 为什么MySQL查询这么慢?

sql - Oracle sql 正则表达式

sql - 从选择中选择计数(*)