考虑以下网站分析系统的简化数据库。
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
?优点和缺点是什么?
据我了解,您正在关系模型中设计解决方案。如果是这种情况,那么您在回答问题时应该主要使用正常形式。
就您而言,在
events
表中,我们违反了第二范式。
第一范式且每个非主键的关系 属性在功能上完全依赖于主键,那么 关系是第二范式(2NF)。
在您的情况下,非键属性
tenant_id
取决于非键属性website_id
,但应该仅取决于键。