【问题标题】:SQLite table design questionSQLite 表设计题
【发布时间】:2010-02-12 13:41:07
【问题描述】:

我正在开发一个处理已完成服务的发票的程序。我想知道布局一张发票表的最佳方式是什么,每张发票可以有一个或多个任务。到目前为止,发票包括:

Invoice Table
| InvoiceNumber | Department | DateOfBilling |

现在,我需要以某种方式存储与该发票关联的作业。每个作业都有以下变量:

Job
| Date | ServiceDescription | Hours | Cost |

(小时和成本并不总是需要两个变量的直接乘积)

我通常是使用 SQLite 和数据库的新手,但这些是我的想法 跟上。一种解决方案是在计费日期之后添加一列,其中包含一个 TEXT 或 BLOB 条目,该条目是一个格式化字符串,从数据库中提取时需要进行标记。例如:

| DateofBilling | Date;ServiceDescription;Hours;Cost!Date;...

当需要访问有关发票任务的特定信息时,我可以将其视为添加了许多其他工作,但工作量不大。

另一个想法是在“开票日期”之后添加一列,该列仅包含一个 JobID。然后有一个新的作业表来存储所有作业和一个匹配的 JobID。示例:

Invoice Table
| DateOfBilling | JobID

Job Table
| JobID | Date | ServiceDescription | Hours | Cost |

这看起来更简洁,但我没有足够的经验知道如果每次发票都需要作业列表时,我必须在一段时间内查询每个作业的表1-5个左右的条目。

感谢您提供的任何帮助。

【问题讨论】:

  • 发票和作业之间存在什么类型的关联:多对多、一对多?

标签: database-design sqlite


【解决方案1】:

假设您还有一份可能的职位描述的固定列表,您可能会选择:

A Jobs reference table:
JobId, Description, BaseTimeEstimate ...

Invoice table:
InvoiceId, DepartmentId, DateOfBilling ...

Then an InvoiceDetail table:
InvoiceId, JobId, ActualHours, Cost ...

类似的东西。

对于可能是自定义条目的作业,可以使用更简单的结构:

Invoice table:
InvoiceId, DepartmentId, DateOfBilling ...

Then an InvoiceDetail table:
InvoiceId, JobId, JobDescription, ActualHours, Cost ...

这样。

【讨论】:

  • 有些作业可以修复,但很多都是自定义条目。
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 2011-10-23
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多