SQL“一对多”关系 - “外键列表”不是很有用吗?

问题描述 投票:0回答:1

我最近刚刚开始在我的新项目中使用 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 的强制部分: 我尝试做什么?只是一个理论上的例子

sql database relational-database
1个回答
0
投票

owner
表中的
Person
列将是一个外键,它除了确保关系之外还将有一个索引

这意味着在

Person
上查询
owner = ...
表过滤非常快速且高效。

© www.soinside.com 2019 - 2024. All rights reserved.