Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使每月付款正常化_Sql_Database_Normalization_Database Normalization - Fatal编程技术网

Sql 使每月付款正常化

Sql 使每月付款正常化,sql,database,normalization,database-normalization,Sql,Database,Normalization,Database Normalization,首先,对不起我的英语不好。我正试图使养老金系统中的一个表正常化,在这个系统中,订户按月付费。我需要知道谁得到了报酬,谁没有,他们得到了多少报酬。我相信我正在使用SQL Server。下面是一个例子: id_subscriber id_receipt year month pay_value payment type_pay 12 1 2016 January 100 80 1

首先,对不起我的英语不好。我正试图使养老金系统中的一个表正常化,在这个系统中,订户按月付费。我需要知道谁得到了报酬,谁没有,他们得到了多少报酬。我相信我正在使用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    

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


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

更具体一些。。。您尝试过什么以及您在寻找什么?编辑您的问题并包括示例数据、期望的结果和您实际使用的数据库。您的问题不清楚。请使用小整数存储月份。可能存在涉及“id_收据”、“年份”和“月份”的函数依赖关系。目前还不清楚它是否还涉及其他属性。在了解函数依赖关系之前,无法规范化此关系。没有人能告诉你FD是什么;你必须告诉我们。什么是自然钥匙?@nicomp哈,哈,好吧,我想在这个场景中你会有一个人工钥匙。就像我说的,我看不出分开有什么好处。但是没有任何东西阻止你。那么它甚至不是1NF。@nicomp,除非我缺少满足第一范式的东西,只要你不允许多行具有相同的月份和年份。这是正确的,我不需要在日期上更具体。我真的很感激你的回答。