gpt4 book ai didi

mysql - 复合主键和自动递增?什么是好的做法?

转载 作者:可可西里 更新时间:2023-11-01 07:34:22 26 4
gpt4 key购买 nike

我正在开发具有 Multi-Tenancy 功能的 SaaS 应用程序,并且我决定使用单个数据库(目前是 MySQL Innodb)来存储客户的数据。我选择使用复合主键,例如 PK(client_id, id)。我这里有两种方法,

1:自己增加“id”(通过触发器或代码)

2: 将"id"设置为mysql自增。

在第一种情况下,我将为每个客户提供唯一的id,因此每个客户都有 id 1、2、3 等。在第二种情况下,所有客户的 ID 都会增长。这里的最佳做法是什么?我的优先事项是:性能、安全性和扩展性。谢谢!

最佳答案

您肯定希望使用自动递增的 id 值作为主键。这恰好有很多原因。这里有一些。

  1. 如果您自己生成竞态条件(意外的 id 重复),则需要格外小心。将精力(开发、QA、运营)用于使您的 SaaS 变得出色,而不是在主键上重新发明漏气轮胎。
  2. 您仍然可以在 (client_id, id) 上放置索引,即使它不是 PK。
  3. 您的JOIN 操作将更易于编写、测试和维护。
  4. 此查询模式非常适合从表中获取每个客户端的最新行。它表现非常好。如果您生成自己的 pk,则很难做这种事情。

        SELECT t.*
    FROM table t
    JOIN (SELECT MAX(id) id
    FROM table
    GROUP BY client_id
    ) m ON t.id = m.id

关于mysql - 复合主键和自动递增?什么是好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com