Mysql 设置儿童祖父母关系

Mysql 设置儿童祖父母关系,mysql,sql,database,Mysql,Sql,Database,我构建了一个web应用程序(PHP/MySQL),供人们预测足球比赛 对于联盟表中的每个条目,匹配表中有许多条目 对于匹配表中的每个条目,预测表中有许多条目 我是否应该明确设置从预测表到联盟表的关系?换句话说,我是否应该在predictions表中添加league\u id列 PRO 查询更简单,在某些情况下需要读取的表更少。查询示例,以查找来自某个关系联盟的Someone预测: SELECT * FROM predictions p WHERE p.league_id:league_id

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

  • 对于
    联盟
    表中的每个条目,
    匹配
    表中有许多条目
  • 对于
    匹配表中的每个条目,
    预测表中有许多条目
我是否应该明确设置从
预测
表到
联盟
表的关系?换句话说,我是否应该在
predictions
表中添加
league\u id

PRO

查询更简单,在某些情况下需要读取的表更少。查询示例,以查找来自某个关系联盟的Someone预测:

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
没有关系:

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
CON


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

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

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

一个正确的数据库应该避免重复,最重要的是避免使用冗余数据来避免关系。毫无疑问,您应该更喜欢第二个查询,即建议的和相关的模式

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

无需显式设置关系。拥有更大的数据库是冗余数据的最小问题。冗余不利于数据完整性,因为它违反了规则和原则。除非你已经证明了优化查询性能的必要性,否则我不会考虑保留一个冗余列。谢谢你的洞察力,我很抱歉我不能把它标记为正确的答案。你是对的,一些研究告诉我,如果不需要优化,就不需要优化。这基本上就是你在最后一句话中所说的:)不需要显式地设置关系。拥有一个更大的数据库是冗余数据的最小问题。冗余不利于数据完整性,因为它违反了规则和原则。除非你已经证明了优化查询性能的必要性,否则我不会考虑保留一个冗余列。谢谢你的洞察力,我很抱歉我不能把它标记为正确的答案。你是对的,一些研究告诉我,如果不需要优化,就不需要优化。这基本上就是你在最后一句话中所说的:)