在sql中存储类似条目的最佳方法,其中只有一个属性不同

时间:2011-10-26 20:22:09

标签: sql

假设我有一个包含以下架构的表:

CREATE TABLE tasks (taskID TEXT, username TEXT, completed BOOL)

任务表可能会变得越来越大,用户将经常查看已完成的任务,并在不同的时间查看已完成任务的历史记录。每次用户想要查看其中一个(即已完成=“真”)时,此实现需要额外的比较

最好有两个这样的表:

CREATE TABLE ToDo (taskID TEXT, username TEXT)
CREATE TABLE completed(taskID TEXT, username TEXT)

显然,如果是这种情况,每次有人完成任务时,在ToDo表中会发生DELETE,在完成的表中会发生INSERT。

我仍然是高效SQL方式的新手,因此我不知道哪些实现更好。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

我会把它们放在一张桌子里。如果您不熟悉数据库设计,我建议您阅读数据库规范化。

我要改变的一件事是你对taskId和username都使用了TEXT。您确定intvarchar不适合这些列吗?

答案 1 :(得分:0)

由于您必须同时插入新记录并更新或删除每个操作的旧记录,否则您的seconmd建议将成为维护并且速度变慢的噩梦。如果要简化查询,以便不必记住仅获取已完成的项目或仅获取待办事项列表,则将查询放在视图中并使用视图而不是直接查询表。

就表大小而言,现代数据库可以有巨大的表,如果大小太大,可以参与其中。因此,存在大量记录的事实与设计无关。如果大表格被正确编入索引,那么它们通常可以非常有效地运作。