Closed yc-2503 closed 7 months ago
核心的问题是用户ID在本租户下是禁止重复的,但是在其他租户中是允许重复的
,这个问题我之前也遇到过,以我的经验,最好的做法是用户ID全局不重复
,要么修改原用户ID确保不重复,要么如你所做,定义一个新的字段作为ID,替换原有的ID,
最终达到用户ID全局不重复
这个状态。
任何想从其它期望绕开这个点来解决问题的方法,大概率都会得不偿失。
核心的问题是
用户ID在本租户下是禁止重复的,但是在其他租户中是允许重复的
,这个问题我之前也遇到过,以我的经验,最好的做法是用户ID全局不重复
,要么修改原用户ID确保不重复,要么如你所做,定义一个新的字段作为ID,替换原有的ID, 最终达到用户ID全局不重复
这个状态。 任何想从其它期望绕开这个点来解决问题的方法,大概率都会得不偿失。
那在这个项目里,租户是怎么规划的呢?
在这个项目里,首先使用了全局雪花ID,因此任何实体的ID都是全局唯一的,不会出现ID重复问题。 关于租户模式的实现,有几个关键点可以考虑:
我现在一个场景是类似于多租户,比如用户ID在本租户下是禁止重复的,但是在其他租户中是允许重复的。 因为有些场景,库存的物料需要在不同租户直接流转,所以不同的租户,实际是在同一张业务表中。 我现在的处理办法是,单独定义一个没有任何业务含义的主键,然后租户与用户名声明为唯一约束。 但是这样会有一个麻烦,比如我新增一个用户之前,要先检查用户ID是否已经存在,如果用户ID是主键,我只需要依赖UserRepository, 但是因为现在实际的主键是一个没有业务含义的字段,所以,我需要依赖UserQuery 先查询当前用户是否存在,之后再通过UserRepository存入数据库。