Cen*_*bit 13 database-design database-recommendation
在数据库设计方面,我主要是自学成才。我提出这个问题是因为我已经确定了这种通用结构,但我想知道它是否是最有效的或“行业标准”方法。
我设计的大多数数据库都有一个用户表,然后在另一个表中跟踪人员活动。我知道数据库的美妙之处在于具有这些效率,但是活动表将相当快地从每个定期使用它的用户那里收集许多事件,从而在中等用户使用情况下相当快地成为一个巨大的表。这是让它以这种方式增长的最佳实践吗?或者是一层表,还是根据日期、用户数量或其他原因拆分到不同的表?
+--------------------+ +------------------------+
| UserData | | Activity |
+-=------------------+ +------------------------+
| ID (auto uint) | <--1-to-many-+ | ID (auto uint) |
| UserName (text) | +--> | UserID (uint) |
| Email (text) | | Timestamp (time) |
| additional info... | | Type (ID to elsewhere) |
+--------------------+ | additional info... |
+------------------------+
Run Code Online (Sandbox Code Playgroud)
我只是想知道我可以在哪里改进任何东西,以帮助我学习。
你的观察非常好。该活动表将快速增长较大。我过去所做的是将旧数据(比如超过 14 天)存档到ActivityHistory表中。这样做可以将Activity表保持在可管理的大小,如果您需要进行研究,您可以随时查看ActivityHistory表。
或者是一层表,还是根据日期、用户数量或其他原因拆分到不同的表?
您可能想了解数据库中“分区”的概念。大多数 RDBMS 都支持它们(例如,mysql、oracle、sql server、postgresql)。基本上,您让 RDBMS 处理创建/管理每个月/年/任何内容存储在单独表中这一事实的过程,而访问它的代码将其视为一个大表。
您可以按用户名、日期或最常用于访问数据的任何内容对其进行分区。(使其以用户为中心与以日期为中心有优点/缺点......但我不知道你是否希望我进入所有这些)