我已经编程和使用调查软件超过三年了。它最初是一个简单的调查系统,带有一个基本的“用户”SQL表,例如,你可以在大多数CMS中找到它。我最初计划使用该程序两到三次,每次调查大约有30个用户。
今天,该计划已经发展壮大,每月用于一次或两次调查。一项调查可能有数百名用户,这使得这张桌子非常漫长而令人困惑。
但是,我找不到比经典用户列表更好的方法。我虽然为每个调查创建了一个新表,但我觉得这是在寻找问题。我现在所做的是在调查结束时存档完整的SQL数据库,这对于现在来说已经足够方便,但是当我必须快速找到旧调查的结果时,这将变成一场噩梦。我有信心我不是第一个遇到这个问题的人,并且很高兴知道你是如何解决这个问题的。是否有某种最佳实践?
谢谢!
答案 0 :(得分:2)
一种解决方案是维护两个表。用户和用户_历史。
调查完成后,您可以将数据移至users_history。这样,影响应用程序性能的数据库将保持在可管理的大小范围内。出于分析目的,历史表中始终可以获得数据。
答案 1 :(得分:1)
如果每个调查的用户组不同(两个调查中的同一个人有两个不同的用户帐户),您可以添加一个列到引用调查表的users
。
ALTER TABLE users ADD COLUMN survey INT NOT NULL;
ALTER TABLE users ADD FOREIGN KEY (survey)
REFERENCES surveys (id)
ON DELETE CASCADE;
如果您想允许与调查无关的用户,请允许调查引用为NULL并将外键设置为ON DELETE SET NULL
。
当您需要对用户表进行操作时,请使用该列仅获取属于感兴趣的调查的用户。