对于具有多个用户的服务,在数据库层如何转换? 采用一个使用三列表的简单键值存储:
ID
(充当主键,我知道这是一件事),key
,value
。
如果您现在支持多个用户,您会:
owner
列;我的直觉倾向于解决方案(2),所有查询都会受到
owner = "foo"
的限制。 但正如我所说,我几乎没有任何直觉。 如果您确实选择(2),那么 ID 仍然是一个不断增加的整数,还是 (owner, ID)
是一种复合主键?
如果您选择 3,那么您将必须在运行时创建和删除表,并将它们命名为用户特定的名称。这是最好避免的事情。 2更实用。保留一个由序列生成的值的主键,并为您的所有者 ID 保留一个外键。
您所指的概念的正确术语是“租户”,而不是“用户”。 “用户”一词有如此多的其他用途,以至于实际上无法使用。 (看看我在那里做了什么?)
那么,问题是“如何在数据库中实现多租户?”
答案当然是“tenant_id”字段。总是。
从关系的角度来看,任何涉及每个事物一个表的解决方案都是错误的。 不管那是什么东西。