哪种表结构更好

Era*_*nga 0 oracle database-design

我们必须创建几个表,仅用于在Oracle中进行报告.

选项1

应收账款表

  • 参考编号
  • 日期
  • TrnType例如:税,费,保费

选项2

应收账款表

  • 参考编号
  • 日期
  • 费用
  • 额外费用

注意:对于给定的RefNo,所有类型的税,费和保费或其子集都可以存在.

什么是最佳结构(表将有超过100k的记录)

pax*_*blo 9

这些都不是最好的(就DBA的想法而言).最好的是(假设RefNo是唯一的,因此是主键):

Receivables:
    RefNo
    Date
ReceivableDollarVals:
    RefNo
    Type
    Amount
Run Code Online (Sandbox Code Playgroud)

如果RefNo/Date是主键,也可以将日期添加到第二个表.

这允许您最小化那些不具有所有三种类型的行的存储空间(尽管节省的是最小的).然后使用WHERE组合两个表(或JOINs)的子句来进行查询.

它还允许您随意添加其他类型而无需重构数据库.

但是,您需要记住,第三范式是理想的.只要您了解其含义,违反规则以获得性能是完全可以接受的.

100,000个记录实际上非常小,所以,除非你认为你将在不久的将来添加更多类型,我会选择你的选项2并使用零来存储那些不存在的值.NULL很可能会使您的查询更复杂一些.