Mysql ';用户';SQL表失控。寻找更好的方法

Mysql ';用户';SQL表失控。寻找更好的方法,mysql,sql,database-table,Mysql,Sql,Database Table,我已经编程和使用调查软件三年多了。它最初是一个简单的调查系统,有一个基本的“用户”SQL表,例如,你可以在大多数CMS中找到。我最初计划使用这个程序两三次,每次调查大约有30个用户 如今,该项目已经发展壮大,每个月都会进行一到两次调查。一项调查可能有数百名用户,这使得表格非常长且令人困惑 不过,我找不到比经典用户列表更好的方法。我曾想过为每项调查创建一个新表,但我觉得这会带来问题。我现在要做的是在调查完成后归档完整的SQL数据库,这对现在来说很方便,但当我必须快速查找旧调查的结果时,这将变成一场

我已经编程和使用调查软件三年多了。它最初是一个简单的调查系统,有一个基本的“用户”SQL表,例如,你可以在大多数CMS中找到。我最初计划使用这个程序两三次,每次调查大约有30个用户

如今,该项目已经发展壮大,每个月都会进行一到两次调查。一项调查可能有数百名用户,这使得表格非常长且令人困惑

不过,我找不到比经典用户列表更好的方法。我曾想过为每项调查创建一个新表,但我觉得这会带来问题。我现在要做的是在调查完成后归档完整的SQL数据库,这对现在来说很方便,但当我必须快速查找旧调查的结果时,这将变成一场噩梦

我相信我不是第一个遇到这个问题的人,我很高兴知道你是如何解决这个问题的。有什么最佳实践吗


谢谢

一个解决方案是维护两个表。用户和用户的历史记录


调查完成后,您可以将数据移动到用户的历史记录中。这样,影响应用程序性能的数据库将保持在可管理的范围内。出于分析目的,历史记录表中始终有数据可用。

一种解决方案是维护两个表。用户和用户的历史记录


调查完成后,您可以将数据移动到用户的历史记录中。这样,影响应用程序性能的数据库将保持在可管理的范围内。出于分析目的,历史记录表中的数据始终可用。

如果每个调查的用户集不同(两个调查中的同一个人将有两个不同的用户帐户),则可以向参考调查表的
用户添加列

ALTER TABLE users ADD COLUMN survey INT NOT NULL;
ALTER TABLE users ADD FOREIGN KEY (survey) 
    REFERENCES surveys (id) 
    ON DELETE CASCADE;
如果要允许与调查无关的用户,请允许调查引用为NULL,并在删除时将外键设置为
设置为NULL


当需要对用户表进行操作时,请使用该列仅获取感兴趣的调查的一部分用户。

如果每个调查的用户集不同(两个调查中的同一个人将有两个不同的用户帐户),则可以向引用调查表的
用户添加一列

ALTER TABLE users ADD COLUMN survey INT NOT NULL;
ALTER TABLE users ADD FOREIGN KEY (survey) 
    REFERENCES surveys (id) 
    ON DELETE CASCADE;
如果要允许与调查无关的用户,请允许调查引用为NULL,并在删除时将外键设置为
设置为NULL


当需要对users表进行操作时,请使用该列仅获取感兴趣的调查中的用户。

MySQL对具有数百万行的表没有问题。在这个千年之后,你可以每月两次增加30个用户。是的,我知道没有限制。在我的例子中,限制是自己管理用户。一些具体情况:两个用户拥有相同的jsmith用户名;用户已被邀请参加间隔两年的多次调查。跟踪他们很难;我对一个用户能够访问另一个用户的调查有点偏执,所以我想要一些类似子表的东西。很可能我不得不面对不断增长的表格,重新设计逻辑——这就是我要做的——但我想知道是否还有其他方法。如果一个用户可以看到另一个用户的调查,那么你的问题比想象中的“太长的表格”问题要大得多。再问一个关于如何生成唯一用户标识符的问题。当然他们不能!正如我所说的,如果确实出现了严重的问题,这一部分完全是妄想症。MySQL对具有数百万行的表没有问题。在这个千年之后,你可以每月两次增加30个用户。是的,我知道没有限制。在我的例子中,限制是自己管理用户。一些具体情况:两个用户拥有相同的jsmith用户名;用户已被邀请参加间隔两年的多次调查。跟踪他们很难;我对一个用户能够访问另一个用户的调查有点偏执,所以我想要一些类似子表的东西。很可能我不得不面对不断增长的表格,重新设计逻辑——这就是我要做的——但我想知道是否还有其他方法。如果一个用户可以看到另一个用户的调查,那么你的问题比想象中的“太长的表格”问题要大得多。再问一个关于如何生成唯一用户标识符的问题。当然他们不能!正如我所说的,如果确实发生了严重的错误,那么这一部分就是纯粹的偏执。是的,我同意Shamit,将表划分为“活动”和“归档”是一个好主意。分区归档的方式取决于数据量、访问活动等。我们每年都在事务系统上归档表。我们还在报告系统中跨live和archive表构建索引视图,以实现整合的汇总。是的,我同意Shamit的观点,将表划分为“live”和“archive”是一个好主意。分区归档的方式取决于数据量、访问活动等。我们每年都在事务系统上归档表。我们还在报告系统中的live和archive表中构建索引视图,以实现整合汇总。