2016-09-30 9 views
-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 

Но я не счастлив повторять год и месяц для каждого отдельного абонента. Это не кажется правильным. Есть ли лучший способ хранить эти данные?

EDIT: Дело в следующем: у этой компании есть много подписчиков, которые должны платить ежемесячно, а оплата может быть различными способами. Они производят единую квитанцию ​​для многих клиентов, и каждый клиент, квитанция которого может платить одну или несколько партий.

Это мои другие таблицы:

      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  
+1

Будь конкретнее ... Что вы пробовали и что искали? – Teja

+1

Измените свой вопрос и включите образцы данных, желаемые результаты и базу данных, которую вы фактически используете. –

+1

Ваш вопрос непонятен. – Teja

ответ

-2

В основном это кажется прекрасным. Вы можете расставить даты в отдельный стол и ссылаться на это, но это поражает меня как своего рода глупый способ сделать это. Я бы порекомендовал хранить месяц как целое, а не в столбце varchar. Помимо того, что вы не повторяете одну и ту же строку снова и снова, вы можете более разумно выполнять сравнения.

Вы также можете использовать значения даты, хотя это может не стоить проблем, если вы не хотите большей детализации, чем месяц.

+0

Что такое естественный ключ? – nicomp

+0

@nicomp Ха, ха, ну, я думаю, у вас есть искусственный ключ в этом сценарии. Как я уже сказал, я не вижу никакой пользы для разделения. Но вас никто не останавливает. – Casey

+0

Ну, это еще не 1NF. – nicomp