当前位置:  开发笔记 > 数据库 > 正文

更少的桌子比更好吗?

如何解决《更少的桌子比更好吗?》经验,为你挑选了2个好方法。

我正在实施一个小时间跟踪应用程序,我不能在两个数据库设计之间做出决定.

第一个包含单个表中的所有日志条目,即.

TimeLog
-------------
job_id   :  long
timestamp
start    :  boolean [or perhaps 'type : enum']
_id      :  long

另一种选择是有两个表,一个用于'开始'条目,另一个用于'停止'条目.

StartLog                     StopLog
-------------                -------------
job_id   :  long             job_id   :  long
timestamp                    timestamp
id      :  long              id      :  long

每种方法的优缺点是什么?还有另一种选择吗?

我的特定应用程序将在SQLite上运行,我想优化它以提高速度 - 但我对泛型参数感兴趣.



1> Cade Roux..:

我会选择第一个(单表,类型区分)设计,不是特别因为有太多表,而只是因为数据库实体非常相似,并且会有类似的约束和操作.



2> William Bren..:

我会使用第一个设计:一个数据库表.正如Cade Roux所说,实体非常相似,并且会有类似的约束和一组共同的操作.另外,我建议将start字段重命名为type使用数据类型调用的字段enum.

假设在某些时候你想记录其他时间,而不仅仅是开始和停止时间.最明显的例子是雇主记录员工的休息时间.一些雇主向员工支付短暂休息时间,可能持续15分钟或更短时间.你希望他们完全打出来(即"熄灭"),但你确实想表明他们已经开始休息时间,工资计算和法律目的(例如,n每小时强制休息),根据法律要求).

Table "TimeLog"
---------------
job_id     :  LONG
timestamp  :  TIMESTAMP
type       :  ENUM [ "punch-in", "punch-out", "break-start", "break-stop" ]
_id        :  LONG

type使用数据类型的字段可以轻松完成此操作enum.你可以有一个punch-in,punch-out,break-start,并且break-stop,在上述例子的情况下.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有