【发布时间】:2012-05-29 00:51:01
【问题描述】:
我似乎在网络上找不到任何人这样做的例子,所以我想知道这是否有原因(或者我没有使用正确的搜索词)。甚至可能已经有一个我不知道的术语?
为了为定期重复出现的字符串节省数据库存储空间,我正在考虑创建一个名为 unique_string 的 MySQL 表。它只有两列:
- "id" : INT : PRIMARY_KEY 索引
- “字符串” : varchar(255) : 唯一索引
然后,数据库中任何位置的任何其他表都可以使用 INT 列而不是 VARCHAR 列。例如,名为 browser 的 varchar 字段将改为名为 browser_unique_string_id 的 INT 字段。
我不会将它用于性能重要的任何事情。在这种情况下,我使用它来跟踪每个页面请求的详细信息(记录 Web 统计信息)以及对 Intranet 上的用户操作的“审计试验”,但其他事情也可能如此。
我也知道 SELECT 查询会很复杂,所以我并不担心。我很可能会编写一些代码来生成查询以返回“真实”字符串数据。
想法?我觉得我可能在这里忽略了一些明显的东西。
谢谢!
【问题讨论】:
-
我可能错过了您想要做的事情,但是您的描述听起来完全像数据库规范化的香草最佳实践; stackoverflow.com/questions/723998/…
-
Normalisation? - “数据库规范化是组织关系数据库的字段和表以最小化冗余和依赖性的过程。” - 来自维基百科
-
我知道您想将 varchar 存储到带有 id 的表中,并且您将使用 ID 而不是 varchar 类型,对吧?
-
是的,我想我问的原因是我还没有看到任何示例,其中有一个主字符串表在整个数据库中引用,绝对是字符串。通常会有多个表格,专门列出“某事”,例如职位表。
-
您可能对 ARCHIVE 存储引擎感兴趣 - dev.mysql.com/doc/refman/5.5/en/archive-storage-engine.html - 它可以压缩数据,我敢打赌,与您在 SQL 查询 WRT 压缩中所做的相比,zlib 会做得很好。
标签: mysql sql sql-server database database-design