代码之家  ›  专栏  ›  技术社区  ›  Ein Google-Nutzer

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

  •  0
  • Ein Google-Nutzer  · 技术社区  · 1 年前

    我最近刚开始在我的新项目中使用SQL数据库,我有一个关于一对多关系的问题。

    一个简化的例子:假设我们有一个 User 可以定义 Persons (例如,让我们想想模拟人生游戏)。每个用户只是创建自己的人,一个人不能在用户之间共享。

    所以我们有一个列表 Users ,每个用户都有一个列表 人员 。我现在在SQL中这样表示(很抱歉,如果我没有使用任何官方的SQL表示语法…):

    表用户

    id: uuid (primary key)
    

    桌上人员:

    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.
    

    所以现在如果我想得到所有 人员 属于用户的,我可以简单地查询 人员 表,以获取所有者与用户对应的所有元素。好啊

    现在我的问题是:这不是完全没有效率吗?我的意思是,如果我们有100万 用户 创造了1000万 人员 ,SQL数据库必须查询1000万 人员 找到可能属于当前用户的5个人?

    将人员列表添加到 用户 表,这样“查找”可以更快地进行?例如,我应该更新 用户 桌子到这个?

    表用户

    id: uuid (primary key)
    persons: list of uuid (foreign key from Persons)
    

    桌上人员:

    id: uuid (primary key)
    etc.
    

    我在所有的建议中都看到,第一种方法更好,更像“SQL”,但我想第二种方法一定要快几个数量级?

    谢谢你们!

    1 回复  |  直到 1 年前
        1
  •  0
  •   Gaël J    1 年前

    这个 owner 您的 Person 表将是一个外键,它除了确保关系还将具有 指数

    这意味着查询 上的表筛选 owner = ...


    关于在 User 桌子,一些东西:

    • 列表不是本机SQL类型
    • 当它存在时,这将不允许外键和关系
    • 它不能很好地扩展:列表会随着用户的增加而增加,使一个用户在存储方面成为一个非常大的记录