Sql 使每月付款正常化
首先,对不起我的英语不好。我正试图使养老金系统中的一个表正常化,在这个系统中,订户按月付费。我需要知道谁得到了报酬,谁没有,他们得到了多少报酬。我相信我正在使用SQL Server。下面是一个例子: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
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,除非我缺少满足第一范式的东西,只要你不允许多行具有相同的月份和年份。这是正确的,我不需要在日期上更具体。我真的很感激你的回答。