我最近刚刚开始在我的新项目中使用 SQL 数据库,我有一个关于一对多关系的问题。一个简化的例子:
假设我们有一个可以定义人员列表的用户(例如,让我们考虑一个模拟人生游戏)。每个用户只能创建自己的人物,人物不能在用户之间共享。
所以我们有一个用户列表,每个用户都有一个人员列表。我现在会像这样用 SQL 表示(抱歉,如果我不使用任何官方 SQL 表示语法...):
Table Users
id: uuid (Primary Key)
Table Persons:
owner: uuid (Foreign Key from Users)
number: integer (Auto increment, starting from 0)
Primary Key: Composite of owner and number
name: text
age: integer
gender: text
etc
所以现在如果我想获取属于某个用户的所有 Person 的列表,我可以简单地查询 Persons 表来获取所有者对应于该用户的所有元素。好的。
现在我的问题是:这不是完全没有效率吗?我的意思是,如果我们有 100 万用户创建了 1000 万个人,那么 SQL 数据库必须查询 1000 万个人才能找到属于当前用户的可能 5 个人?
将人员列表添加到 Users 表中不是更有效吗,这样“查找”可以更快地进行?例如。我应该将用户表更新为此吗?
Table Users
id: uuid (Primary Key)
persons: list of uuid (Foreign Key from Persons)
Table Persons:
id: uuid (Primary Key)
etc
我在所有建议中都看到第一种方法更好并且更像“SQL”,但我想第二种方法一定要快几个数量级?
谢谢大家!
StackOverflow 的强制部分: 我尝试做什么?只是一个理论上的例子
owner
表中的Person
列将是一个外键,它除了确保关系之外还将有一个索引。
这意味着在
Person
上查询 owner = ...
表过滤非常快速且高效。