归档策略和表中数据的限制

时间:2010-04-06 05:39:10

标签: sql database hibernate database-design jpa

环境:Jboss,Mysql,JPA,Hibernate

我们的网络应用程序将迎合大量用户(约1,000,000),并且存在大量存储用户特定数据的子表(例如,个人,健康,论坛贡献......)。

  1. 归档用​​户&的最佳做法是什么?用户特定信息。 [a]移动存档用户和移动用户是否明智?用户特定信息到同一数据库中的各自表(例如user_archive,user_forum_comments_archive ...)或 [b]您是否只需在原始表中使用标记标记数据库条目,并仅查询非存档条目。

  2. 我们对User.loginid有一个独特的约束,如果用户通过1- [a]存档(即如果具有loginid'samuel'的用户被移入存档表中,如何处理此要求)如果在原始表中添加了具有相同名称的新用户,您将如何防止这种情况。解决唯一键约束的最佳策略是什么。

  3. 我们要求有选择地归档记录并在必要时将其恢复,您是否依赖数据库工具,您是否可以通过JPA实体模型公开的持久性API来处理此问题。

2 个答案:

答案 0 :(得分:2)

就个人而言,我会寻求解决方案“[a]”。

将事物拆分为两个表集(当前和已存档)会使常见的RDBMS概念难以管理(例如:论坛评论作者将是指向用户表的外键...但是你不能将字段表现为两个不同表的外键)。

你可以寻求妥协(用户表使用解决方案“a”,所有其他表如profile可以存档到双胞胎表,如解决方案“b”)但这会使你的代码变得不必要地复杂化(在某些情况下)你需要查看非存档的情况,有些情况只能存档,在其他一些情况下可以查看两者的并集。

解决方案A也可轻松解决#2和#3要求。如果所有内容都在同一个表中,则用户名的唯一性很容易实现,并且恢复归档用户只需在主用户表上稍微翻转(Archived = Y / N)。

10%并不多,我怀疑性能方面的差异是否真的证明了额外的复杂性(以及错误的风险)。

答案 1 :(得分:1)

我会在表格上放置一个存档标志,然后创建一个视图,以便在您不想查看存档记录时使用。这样人们在应用我怀疑的档案标志时会更加一致。