我应该将tenant_id存储在多租户数据库的每个表中吗?

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

考虑以下网站分析系统的简化数据库。

Tenants
-------
id
name
timestamps
Websites
--------
id
name
timestamps
tenant_id
Events
------
id
name (page_view, click, download etc)
browser
os
device
timestamp
website_id
tenant_id

我知道我们应该在每个表中添加一个

tenant_id
列以实现数据隔离或完整性。

但是像

events
这样的表呢?因为我们将每个事件存储为新行,所以这将是一个巨大的表(数十亿行)?

我们将始终根据 website_id 过滤

events
,并且它已经有一个
tenant_id
字段。

我们是否还应该在此表中添加

tenant_id
?优点和缺点是什么?

database database-design multi-tenant
1个回答
0
投票

据我了解,您正在关系模型中设计解决方案。如果是这种情况,那么您在回答问题时应该主要使用正常形式。

就您而言,在

events
表中,我们违反了第二范式。

第一范式且每个非主键的关系 属性在功能上完全依赖于主键,那么 关系是第二范式(2NF)。

在您的情况下,非键属性

tenant_id
取决于非键属性
website_id
,但应该仅取决于键。

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