【问题标题】:Normalize monthly payments使每月付款正常化
【发布时间】:2017-02-09 14:59:54
【问题描述】:

首先,对不起我的英语不好。我正在尝试规范化养老金系统中的表格,其中订阅者按月支付。我需要知道谁得到了报酬,谁没有得到报酬,以及他们得到了多少报酬。我相信我正在使用 SQL Server。这是一个例子:

id_subscriber  id_receipt     year   month     pay_value   payment type_pay
 12               1           2016   January    100          80       1   
 13               1           2016   January    100          100      1 
 14               1           2016   January    100          100      1
 12               2           2016   February   100          100      2
 13               2           2016   February   100          80       1

但我不乐意为每个订阅者重复年份和月份。好像不太对。有没有更好的方法来存储这些数据?

编辑: 案例如下:这家公司有很多订阅者,他们必须每月支付,支付方式多种多样。他们为许多客户制作一张收据,而该收据的每个客户都可能分期付款或分期付款。

这些是我的其他表格:

                           tbl_subscriber
id_suscriber(PK) first_name  last_name  address  tel_1  tel_2
    12             Juan         Perez      xxx     xxx    xxx
    13             Pedro        Lainez     xxx     xxx    xxx
    14             Maria        Lopez      xxx     xxx    xxx 

                           tbl_receipt
id_receipt(PK)      value        elaboration_date  deposit_date 
    1             1,000.00         2015-09-16       2015-09-20
    2             890.00           2015-12-01       2015-12-18 

                          tbl_type_paym
 id               type             description
 1                bank               xxxx
 2              ventanilla            xxx    

【问题讨论】:

  • 更具体...您尝试过什么,想要什么?
  • 编辑您的问题并包括示例数据、所需结果和您实际使用的数据库。
  • 弗兰克你的问题不清楚。
  • 使用小整数来存储月份。
  • 可能存在涉及“id_receipt”、“year”和“month”的函数依赖关系。目前尚不清楚它是否也可能涉及其他属性。在您知道函数依赖之前,您无法规范这种关系。我们谁也无法告诉您 FD 是什么;你必须告诉我们

标签: sql database normalization database-normalization


【解决方案1】:

这基本上看起来不错。您可以将日期拆分到一个单独的表格中并引用它,但这让我觉得这是一种愚蠢的做法。我建议将月份存储为整数而不是 varchar 列。除了不一遍又一遍地存储相同的字符串之外,您还可以更合理地进行比较。

您也可以使用日期值,但如果您不想要比月份更大的粒度,这可能不值得麻烦。

【讨论】:

  • 什么是自然键?
  • @nicomp 哈,哈,好吧,我猜你在这种情况下会有一把人工钥匙。就像我说的,我看不出分手有什么好处。但是没有什么能阻止你。
  • 那么它甚至不是 1NF。
  • @nicomp 除非我遗漏了一些东西,否则只要您不允许多行具有相同的月份和年份,它就满足第一范式。
  • 没错,我不需要更具体的日期。非常感谢您的回答。
猜你喜欢
  • 2015-04-13
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2017-05-12
  • 1970-01-01
  • 2011-04-24
  • 2015-08-02
相关资源
最近更新 更多