Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нормализация банковской базы / 25 сообщений из 26, страница 1 из 2
18.10.2016, 13:24
    #39328935
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Немного залип на задании спроектировать бд.
Даны три сущности:
1. Клиенты - id, ФИО, дата открытия, дата закрытия
2. Счета - номер счёта, клиент, баланс счёта, даты открытия и закрытия
3. Платежи - id, дата, сумма, номер счета дебета, номер счета кредита, описание платежа.
Плохо понимаю типы взаимосвязей между сущностями. По идее у клиента со счетами связь один ко многим ( у одного клиента много счетов), в то же время у счета с платежом та же связь (на один счет может поступать множество платежей).
Судя по полям в платежах, счета нужно разбить на две сущности - счета дебета и счета кредита, но не уверен.
Также была мысль вынести дату открытия-закрытия в отдельную сущность, т.к. поле встречается сразу в трёх таблицах.
Куда думать дальше и какие ошибки я уже совершил? :D
...
Рейтинг: 0 / 0
18.10.2016, 13:33
    #39328941
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolf,

учтите, что платежи могут быть не только между клиентами, а на счета в другие банки, банковские комиссии, начисления процентов и прочие
клиентами могут быть не только физические лица
...
Рейтинг: 0 / 0
18.10.2016, 13:37
    #39328945
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Naf,
настолько глубоко углубляться пока не нужно )
" что платежи могут быть не только между клиентами "
Я думал что платежи могут быть только между счетами :D причём не до конца понятно как именно со счетами связаны. Возможно ли, что когда совершает платёж, он заносится и в счёт дебета, и в счёт кредита одновременно?
...
Рейтинг: 0 / 0
18.10.2016, 13:42
    #39328948
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolfNaf,
настолько глубоко углубляться пока не нужно )
" что платежи могут быть не только между клиентами "
Я думал что платежи могут быть только между счетами :D причём не до конца понятно как именно со счетами связаны. Возможно ли, что когда совершает платёж, он заносится и в счёт дебета, и в счёт кредита одновременно?
Да, между счетами, я имел ввиду, что счета между которыми проводятся переводы принадлежат не только клиентам
...
Рейтинг: 0 / 0
18.10.2016, 13:52
    #39328961
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Вот простейшая схема. Здесь текущий баланс счета получается расчетным путем. Можно в счета добавить атрибут "Сумма баланса". Тогда нужно обеспечить непротиворечивость между таблицами платежей и счетов.
...
Рейтинг: 0 / 0
18.10.2016, 14:07
    #39328968
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Naf, немного не понимаю в схеме - над стрелками написаны атрибуты или сущности?
...
Рейтинг: 0 / 0
18.10.2016, 18:23
    #39329229
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolf,

Хммм....
Счета в банке не бывают дебетовыми или кредитовыми. Naf описал более правильную схему:
1) у клиента есть счета.
При этом клиентом может выступать кто угодно: Юр лицо, Физ лицо, другой банк, свой банк.
У клиента есть разделение (в зависимости от типа, какие счета на него можно открывать, об этом ниже в банковском плане счетов)

2) У проводки есть 2 счета дебетовый и кредитовый.
Любой счет может выступать как по дебету так и по кредиту. (У проводки, кстати, еще нужна сумма).
Одновременно (!) один и тот же счет и по дебету и по кредиту выступать не может (это бессмысленно)

3) Счета четко относятся к банковскому плану счетов.
Первая цифра - раздел плана счетов - по сути определяю отношение этого счета к типу клиенту
Первые три цифры (вместе с первой) - счет первого порядка - разъясняют предназначение счета, например 423 - вклады, 408 - расчетные счета
Первые пять цифр (вместе с разделом и счетом первого порядка) - счета второго порядка - уточняют предназначение. например 42301 - вклады до востребования, 42302 - вклады до 1 месяцы и тд.
Так же в плане счетов стоит важное уточнение что за тип этого счета - актив или пассив.

Сумма указанная в проводке изменяет на это значение остаток обоих счетов одновременно (т.е. не может быть такого что проводка поменяла остаток только одного счета), но знак изменения определяет совокупным фактором для каждого счета:
а) где стоит этот счет - по дебету или по кредиту
б) что у него за тип - активный или пассивный
Если, например, проводка между активным и пассивным счетом, то сумма одновременно увеличивается на двух счетах или уменьшается на двух счетах.

И это только относительно текущих "таблиц" ))))

что бы понять куда расширять эту схему нужно понять что вы вообще описываете. Т.к. если уходить в процессинг (пластик), то там одно. Если в учет ценносей в банке - другое, вклады, кредиты, внебалансы (не знаю используются ли еще), межбанк, внутрибанк, комиссии - это я просто термины набросал, но за ними куча разных процессов и таблиц )))

Если у вас задача спроектировать реальную АБС, то бросьте. Если для курсового - давайте тему.
...
Рейтинг: 0 / 0
18.10.2016, 19:19
    #39329276
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Naf,

Атрибуты
...
Рейтинг: 0 / 0
18.10.2016, 19:36
    #39329289
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolfДаны три сущности:
1. Клиенты - id, ФИО, дата открытия, дата закрытия
2. Счета - номер счёта, клиент, баланс счёта, даты открытия и закрытия
3. Платежи - id, дата, сумма, номер счета дебета, номер счета кредита, описание платежа.кем даны и почему именно такие? если это "типа курсовая", то делайте именно так как поставлена задача не нужно городить реальный банк.
...
Рейтинг: 0 / 0
18.10.2016, 20:57
    #39329327
babona
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
аффтар АБС собственную пилит
...
Рейтинг: 0 / 0
18.10.2016, 21:37
    #39329342
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
lLocust,
Ууу, засыпали :D
Задачку дали решить, так что слишком сильно углубляться не нужно. Всё что написал - данное мне условие слово в слово. По нему необходимо спроектировать простенькую БД, но так как я с банковскими системами не знаком совершенно не понимаю как сущности связаны между собой. Но ваш пост здорово помог в этом плане!
Если рассматривать модель исключительно в рамках условия, то насколько всё плохо в диаграмме? Правильно ли разделены сущности и взаимосвязи? Стоит ли что-то ещё выделить?
...
Рейтинг: 0 / 0
18.10.2016, 21:41
    #39329343
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Дедушка,

дали задачку чтобы вспомнить проектирование бд и sql. Я и не собирался выходить за рамки условия, но если есть какие-нибудь мелочи которые можно добавить, то они пойдут в плюс
...
Рейтинг: 0 / 0
18.10.2016, 22:27
    #39329359
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolfЕсли рассматривать модель исключительно в рамках условия, то насколько всё плохо в диаграмме?
В диаграмме все достаточно плохо.
Возьмите, действительно, лучше за основу схему Naf'а.
...
Рейтинг: 0 / 0
18.10.2016, 23:17
    #39329386
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Кот Матроскин,

Как в этой схеме реализуется связь между счетами и платежами? D: В платежах два внешних ключа "отправитель" и "получатель"?
...
Рейтинг: 0 / 0
18.10.2016, 23:30
    #39329390
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolf
Как в этой схеме реализуется связь между счетами и платежами? D: В платежах два внешних ключа "отправитель" и "получатель"?
Да
( лучше назвать "счет дебета" и "счет кредита", как написано у Вас в постановке)
...
Рейтинг: 0 / 0
18.10.2016, 23:32
    #39329392
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Кот Матроскин,

А на какое поле в счёте они должны ссылаться? Оба на клиента?
...
Рейтинг: 0 / 0
18.10.2016, 23:38
    #39329398
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
зачем на клиента - на счет же (на первичный ключ)
...
Рейтинг: 0 / 0
19.10.2016, 10:51
    #39329611
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolf...Всё что написал - данное мне условие слово в слово. По нему необходимо спроектировать простенькую БД...

coffe4wolf...Даны три сущности:
1. Клиенты - id, ФИО, дата открытия, дата закрытия
2. Счета - номер счёта, клиент, баланс счёта, даты открытия и закрытия
3. Платежи - id, дата, сумма, номер счета дебета, номер счета кредита, описание платежа.
...

Если постановка в виде таблиц, то... сочувствую ))) Просто делайте таблицы как сказано в вашей же постановке.
Если хотите, то небольшие уточнения к постановке:
1) баланс счёта (в счете, соответственно) - это, наверное, актуальный остаток. Если хотите, то более правильно вынести это в отдельную таблицу. Т.к. может потребоваться получать остаток на определенную дату (и часто), в текущей постановке это не реализуемо. Можно, конечно, рассчитывать его динамически каждый раз, но это накладно в продуктивной среде при больших объемах. Соответственно при создании проводки нужно пересчитывать остаток счета(ов).
2) Обратите внимание что в постановке в счете нет IDшника, а в платежах ссылка на "номер счета ..".
Возможны межбанковские операции. В этом случае заводить в свою систему счета клиентов чужих банков не рационально (да и не возможно), поэтому в этом случае в платежах просто указывается номер счета. (а связь как таковую делать не с чем). Мне кажется что автор постановки это подразумевал, хотя и не факт.
3) да, даты открытия и закрытия можно вынести в отдельную таблицу, только где у вас связь со счетом?

(Кстати, было бы неплохо, если бы вы иногда выкладывали обновленную схему)
...
Рейтинг: 0 / 0
19.10.2016, 19:54
    #39330156
babona
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
да, да выкладывайте. глядишь, совместными усилиями форумчан родится новая АБС-ка в пику поделкам диасофта, бисквитам, инверсиям, кворумам
...
Рейтинг: 0 / 0
20.10.2016, 00:14
    #39330227
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
lLocust,
"(Кстати, было бы неплохо, если бы вы иногда выкладывали обновленную схему) "
Просто в моём случае всё настолько аутентично х)
"3) да, даты открытия и закрытия можно вынести в отдельную таблицу, только где у вас связь со счетом?"
На тот момент я её не связал, таблицу просто вынес для себя. Если вынести даты открытия-закрытия, то на неё 1-к-1 будут ссылаться своими первичными ключами клиенты и счета?

Кстати ещё дополнение к заданию, написать запросы:
- получить список платежей за прошлый месяц по заданному клиенту и общую сумму проводок за этот период
- отобрать открытых клиентов, у которых все счета закрыты
- изменить описания проводок по заданному счёту по шаблону «Проводка №» + ID + «по счёту» + номер_счёта + «за дату» + дата_проводки + «на сумму» + сумма_проводки
- увеличить текущий баланс заданного счёта на сумму всех проводок за прошлый месяц, где счёт кредита равен заданному счёту

Допустим первое частично написал
SELECT idpayments, sum(sum_pay) FROM payments WHERE `date_pay` > LAST_DAY( DATE_SUB( CURDATE( ) , INTERVAL 2 MONTH ) ) + INTERVAL 1 DAY AND `date_pay` < DATE_ADD( LAST_DAY( CURDATE( ) - INTERVAL 1 MONTH ) , INTERVAL 1 DAY )
Как мне сюда привязать условие по клиенту? :с
...
Рейтинг: 0 / 0
20.10.2016, 02:18
    #39330241
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolfКак мне сюда привязать условие по клиенту?т.к. клиент в данном случае у вас переменная запроса, то я шёл бы от клиента к его счетам (в состоянии открыт в период прошлого месяца) к платежам в которых эти счета либо как счёт дебета, либо счёт кредита и дата платежа в интервале прошлого месяца.
...
Рейтинг: 0 / 0
20.10.2016, 13:05
    #39330552
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Дедушка,
Кстати что если сделать внешний ключ из платежей на внешний ключ fkClients в таблице счетов? Или нехорошо получится?
...
Рейтинг: 0 / 0
20.10.2016, 13:16
    #39330567
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolfКстати что если сделать внешний ключ из платежей на внешний ключ fkClients в таблице счетов?Чего вы хотите этим достичь? Почитайте про то зачем нужны внешние ключи (ссылочная целостность, каскадные операции...).
...
Рейтинг: 0 / 0
20.10.2016, 14:39
    #39330688
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
coffe4wolf"3) да, даты открытия и закрытия можно вынести в отдельную таблицу, только где у вас связь со счетом?"
На тот момент я её не связал, таблицу просто вынес для себя. Если вынести даты открытия-закрытия, то на неё 1-к-1 будут ссылаться своими первичными ключами клиенты и счета?Почему? Если я правильно помню (просто уже более 6 лет как в банке не работаю :) ), то счета могут переоткрываться. Т.е. на один счет может быть несколько открытий и закрытий. Поэтому я говорил о вынесении этого в отдельную таблицу. Если у Вас упрощенная схема с одним открытием, то отдельная таблица со связью 1 к 1му - излишня (оставляйте тот вариант что сейчас выложили)

coffe4wolfКстати ещё дополнение к заданию, написать запросы:
По запросам - неееее )))) пробуйте сами

coffe4wolf- изменить описания проводок по заданному счёту по шаблону «Проводка №» + ID + «по счёту» + номер_счёта + «за дату» + дата_проводки + «на сумму» + сумма_проводки
Что бы выполнить этот запрос нужно дополнить схему комментарием платежа (куда вы будете записывать описание проводки).

coffe4wolfSELECT idpayments, sum(sum_pay) FROM payments WHERE `date_pay` > LAST_DAY( DATE_SUB( CURDATE( ) , INTERVAL 2 MONTH ) ) + INTERVAL 1 DAY AND `date_pay` < DATE_ADD( LAST_DAY( CURDATE( ) - INTERVAL 1 MONTH ) , INTERVAL 1 DAY )
Как мне сюда привязать условие по клиенту? :с Нужно взять счета нужного вам клиента (из таблицы Счетов), привязать все платежи по этим счетам (нужно учитывать и дебет и кредит) и эти платежи отфильтровать по дате. И уже в полученных строчках посчитать сумму платежей.


ндааааАктив, пассив, дебет, кредит.... о чем я вообще )))))
...
Рейтинг: 0 / 0
20.10.2016, 16:23
    #39330845
coffe4wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нормализация банковской базы
Дедушкаcoffe4wolfКстати что если сделать внешний ключ из платежей на внешний ключ fkClients в таблице счетов?Чего вы хотите этим достичь? Почитайте про то зачем нужны внешние ключи (ссылочная целостность, каскадные операции...).
подумал что так будет проще выводить клиента с платежа х.х
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нормализация банковской базы / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]