动态创建表是一种好习惯吗?

sna*_*che 5 dynamic-sql

假设我正在制作一个 IRC 机器人,除了应该存储在数据库中的所有其他东西之外,我想记录机器人所在的每个通道中的所有消息。

我已经有一个channels与列的表idchannel_name以及其他一些信息。

对于记录每条消息,对我来说最有意义的是messages_channelname为每个通道创建一个表,并在其中存储消息以及与其关联的任何其他信息。

但是,这引发了一个问题 - 表的名称现在与通道的名称分离id(尽管我可以通过将表名称设置为 来缓解这种情况messages_channelid)。

我觉得这里的最佳实践,而不是最有意义的做法,是拥有一个messages包含来自所有频道的消息的主表,列channel_id,idmessageid每个频道的消息索引在哪里。但是随后我会(毫无根据地)担心表格大小和可能的搜索速度。

解决这个问题的最佳方法是什么?

Bra*_*adC 8

这个问题没有任何明确的答案。

您已经正确地确定了一些可能的权衡(单表=更简单/可能更慢/更多争用?,多个表=更复杂/更快,也许?/在其他情况下更难使用?)。

一般建议是从更直接的单表解决方案开始,然后在测试出现问题时将其分解。

大多数情况下,只要您有合适的硬件和适当的索引设计,您就会在单个表上获得良好的性能。

根据特定平台,您可能有其他技术解决方案,例如过滤索引视图等。