powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / спроектировать БД для учета валюты
21 сообщений из 21, страница 1 из 1
спроектировать БД для учета валюты
    #35765018
Вот пытаюсь создать базу данных. Условие такое - Создание (АРМ) оператора пункта обмена валюты для автоматизации процедур оперативного учета и анализа.
Имеются несколько сущностей у меня:
Код: plaintext
1.
2.
3.
4.
5.
 1 ) Оператор: Табельный номер, Фамилия, Имя, Отчество, Фотография, Адрес, Телефон.   
 2 ) Валюта: Название, Обозначение, Страна. 
 3 ) Клиент: Фамилия, Имя, Отчество, Дата рождения, Пол, Социальное положение, Адрес, Телефон, Паспортные данные
 4 ) Тип операции: название(продажа, покупка)
 5 ) Текущий курс: Дата, Валюта, Величины курса в рублях: установленного ЦБРФ и установленного учреждением для  продажи и покупки
 6 ) Учет операции: Дата и Время операции, Вид операции, Валюта, Сумма, Текущий курс, Оператор, Клиент.

как понимаю валюта, это любые ден. знаки не включаю рубли, т е иностранне деньги, поэтому РУБЛИ не фигурируют в валюте, это раз.
вопросов с оператором, клиентом, типом операции, валютой нет. Довольно все просто.
Основные проблемы возникли при проектировании БД, когда стал работать с учетом и курсом.

ПО заданию нужно будет провести такую операцию как:
Код: plaintext
1.
2.
3.
Регистрация покупки и продажи валюты. В этой операции должен использоваться тот курс валюты из таблицы Текущий курс, 
который соответствует типу операции (продажа, покупка) и дате операции. Для этого таблицы Учет операций и Текущий курс 
должны быть связаны по полям  Валюта и Дата операции. 
В окне операции должна вычисляться сумма в рублях, которую должен получить или выплатить клиент.
я создал составной первичный ключ для таблицы Курсов и также
первичный ключ в таблице Учета операций и связал их отношением 1 : 1, Access по другому не смог. Это можно увидеть на приложенном рисунке(схема базы данных в Аксес 2003).
вот допустим у меня имеется запись в таблице Курс:
Код: plaintext
1.
Код курса	Дата	Валюта	Продажа по ЦБРФ	Покупка по ЦБРФ	Продажа по учреждению	Покупка по учреждению
 1 	 01 . 01 . 2009 	Доллар	 24 	 23 . 5 	 25 	 23 . 8 

чтобы внести данные в таблицы учета я должен набрать дату 01.01.2009 и выбрать валюту именно доллар, чтобы запись была добавлена иначе возникает ошибка на ограничение ссылочности.
не понимаю, что значит поле "Текущий курс" в таблице Учета, и поле "Сумма" будет вычисляемой?

помогите правильно спроектировать БД, чтобы можно было успешно проводить операции учета? также интересует правильно ли я понял эту предметку и все логично?
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35765189
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать БД по валютепомогите правильно спроектировать БД, чтобы можно было успешно проводить операции учета? также интересует правильно ли я понял эту предметку и все логично?
1. Правильный курс валюты устанавливается не за единицу, а за некоторое количество, например:
12.3902 RUR за 1000 BYR
2. Возможно, нужно делать несколько курсов в зависимости от суммы?
3. Возможно, нужно делать кросс-курсы, типа евро-доллар?
4. Курсы устанавливаются на какой-то период, а не "текущие"

Хотя для простого случая и ваша схема подойдёт.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35765266
Denis V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня несколько смущает связь один к одному между таблиц Course и Operation. По-моему, там напрашивается связь один ко многим. Ведь операций в один день может быть несколько.
И в таблице учёта операций нет необходимости в поле для хранения текущего курса.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35765752
Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q
Гость
...а меня смущает само наличие связи. :) Курс -- периодические сведения, операции -- фактография. Между такими вещами связь может быть только через календарь. Реальный календарь. Физической связи такого типа в БД не предусмотрено.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35765769
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q...а меня смущает само наличие связи. :) Курс -- периодические сведения, операции -- фактография. Между такими вещами связь может быть только через календарь. Реальный календарь. Физической связи такого типа в БД не предусмотрено.Не надо смущаться :)
Вот тынц , где обсуждалось хранение периодических сведений. Здесь недалеко :)
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35765806
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis V.Меня несколько смущает связь один к одному между таблиц Course и Operation. По-моему, там напрашивается связь один ко многим. Ведь операций в один день может быть несколько.
Таблица клиентов тоже не нужна.
И данные о клиенте несколько избыточны - Фамилия, Имя, Отчество, Дата рождения, Пол, Социальное положение, Адрес, Телефон, Паспортные данные

А со связью один к одному автор наверное просто опечатался
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35765921
Denis V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Q...а меня смущает само наличие связи... Физической связи такого типа в БД не предусмотрено.
Соглашусь. Сразу уцепился только за тип связи ;-)
alexeyvg
1. Правильный курс валюты устанавливается не за единицу, а за некоторое количество, например:
12.3902 RUR за 1000 BYR
4. Курсы устанавливаются на какой-то период, а не "текущие"
1 - ну, это простая математика, которая схему данных не сильно поменяет, если автор захочет, чтобы в таблице был правильный курс, а не пересчитанный на единицу национальной валюты.
4 - да, на счёт таблицы Текущие курсы - это название не отражает того, что в ней находится. А в таблице находится динамика изменения курсов. Период между изменениями курсов - это и есть тот самый период, на который устанавливается курс. Т.е. выражение "курс, установленный на выходные", можно понимать так, что курс установлен в пятницу, а в следующий раз изменение курса можно ожидать не раньше понедельника ;-)
Таким образом, при расчёте суммы операции надо будет определить в какой промежуток смены курсов попадает дата операции и брать действующий в этот период курс.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35766007
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis V.4 - да, на счёт таблицы Текущие курсы - это название не отражает того, что в ней находится. Да, дату я и не заметил :-(
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35767929
господа, предлагаю разобраться во всем этом:
автор1. Правильный курс валюты устанавливается не за единицу, а за некоторое количество, например:
12.3902 RUR за 1000 BYR
2. Возможно, нужно делать несколько курсов в зависимости от суммы?
3. Возможно, нужно делать кросс-курсы, типа евро-доллар?
4. Курсы устанавливаются на какой-то период, а не "текущие"
это все не принципиально как думаю

авторИ в таблице учёта операций нет необходимости в поле для хранения текущего курса.
а текущий курс, это вообще что может быть: по ЦБРФ или по учреждению?
кстати тоже думал что лишнее, а почему объяснить не могу.

авторКурс -- периодические сведения, операции -- фактография. Между такими вещами связь может быть только через календарь. Реальный календарь. Физической связи такого типа в БД не предусмотрено.
календарь не потребуется, на этом этапе точно.

авторТаблица клиентов тоже не нужна.
И данные о клиенте несколько избыточны - Фамилия, Имя, Отчество, Дата рождения, Пол, Социальное положение, Адрес, Телефон, Паспортные данные
это почему же?
а кто проводит операции: покупка / продужа с иностранной валютой? клиенты ведь. и почему данные избыточны по клиентам? не понимаю

автор4 - да, на счёт таблицы Текущие курсы - это название не отражает того, что в ней находится. А в таблице находится динамика изменения курсов. Период между изменениями курсов - это и есть тот самый период, на который устанавливается курс. Т.е. выражение "курс, установленный на выходные", можно понимать так, что курс установлен в пятницу, а в следующий раз изменение курса можно ожидать не раньше понедельника ;-)
Таким образом, при расчёте суммы операции надо будет определить в какой промежуток смены курсов попадает дата операции и брать действующий в этот период курс.
не очень понимаю, почему не отражает? Начинается новый день, указывается валюта и ее расценки по ЦБРФ и учреждению. Если производится продажа покупка за какой то день (получается можно только по текущий) то берутся данные из этой таблицы

теперь по поводу связей 1 : 1 между таблицей "Курс" и "Учет движения". Аксесс создает только такой вариант, 1 : М при составном ключе не получается получить. что делать?
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35767979
Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q
Гость
убрать вообще эту связь. Убрать этот IDCourse -- зачем он нужен? Курсом валюты Х считать последний установленный курс Х с датой/временем <= текущая дата/время. Записывать при регистрации операции отдельно дату/время курса и его значение.
---
Некоторые обменники уже вспомнили практику 98го и меняют курсы ЧАЩЕ чем 1 раз в сутки. :)
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35767984
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать БД по валютеавторТаблица клиентов тоже не нужна.
И данные о клиенте несколько избыточны - Фамилия, Имя, Отчество, Дата рождения, Пол, Социальное положение, Адрес, Телефон, Паспортные данные
это почему же?
а кто проводит операции: покупка / продужа с иностранной валютой? клиенты ведь. и почему данные избыточны по клиентам? не понимаюТаблица не нужна, потому что оператор не будет выбирать (искать) клиентов из списка.
Достаточно записывать атрибуты клиента в операции.

Почему избыточны - ну зачем записывать Пол, Социальное положение, Телефон клиента??? Это какой закон или инструкция цб требует?

Создать БД по валютекстати тоже думал что лишнее, а почему объяснить не могу.потому что есть ссылка на курс, при котором делалась операция.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35768069
TsRV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А физику вспомнить желания ни у кого не возникало?

Точка движется по плоскости - две координаты: время и курс. Или должно быть в объеме?
Можно точки рисовать разного цвета - чтобы отличать валюты, так сказать, - получается объем :)
Все в двух таблицах: точки и валюты.

Что то еще требуется от курса валют?
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35768338
авторТаблица не нужна, потому что оператор не будет выбирать (искать) клиентов из списка.
Достаточно записывать атрибуты клиента в операции.

Почему избыточны - ну зачем записывать Пол, Социальное положение, Телефон клиента??? Это какой закон или инструкция цб требует?
совсем не обязательно. что оператор не будет выбирать что либо из справочника, поэтому таблица "Клиент" останется, тем более по ТЗ должна быть.

авторпотому что есть ссылка на курс, при котором делалась операция.
а какой курс считается текущим: по ЦБРФ или по учреждению?

авторУбрать этот IDCourse -- зачем он нужен?
согласен, теперь он не нужен, только место занимает лишнее и не функционален.
а может все таки пригодится для чего либо?

аналогично из таблицы "Operation" можно убрать IDoperation?
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35768350
вроде потихоньку начинаю понимать. Переделал немного структуру БД (прил. файл). С таблицами: "Client", "Operator", "typeOperation", "Currency" все понятно, это просто справочники по большому счету. С таблицей "Course" тоже более менее понятно, т е вбиваем данные за какое то число (думая что оно является текущим), указывая все курсы (по ЦБРФ и по учреждению). Первичный ключ таблицы "Course" составной (состоит из двух полей: даты и валюты (валюта - подставное поле из таблицы "Currency") ). Таблица "Operation" имеет ключевое поле и двойную связь с таблицей "Course", причем поле Operation.IDCurrency является подставным из таблицы Currency. Хотел поле DateAndTimeOperation подставить из таблицы "Course", но оказалось, что подобные поля Access 2003 запрещает подставлять, пришлось просто написать тип Даты - времени. Как понимаю поле Summa должно вводиться клиентом, т е эта та сумма в РУБЛЯХ, на которую клиент совершает продажу / покупку (например покупка Долларов на сумму в 1340 рублей или продажа евро на сумму 45 000 рублей).
Т е получается когда заносится нужная запись в таблицу "Operation", нужно указать одновременно дату и валюту, принадлежащие какой либо записи в таблице "Course" иначе будет нарушение целостности. Все бы ничего, но уж больно непонятно, какие данные вбивать, т е нужно помнить наизусть записи таблицы "Course", чтобы провести операцию. Неудобно. Как можно побороть эту проблему или и так все нормально???
спасибо
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35768589
Denis V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создать БД по валюте,
думается, что действия оператора при обращении клиента будут следующие (указаны основные):
- указать тип валюты
- указать тип операции (покупка, продажа)
- указать сумму в валюте
Дата и время операции - автоматически подставляется текущее (вот это слово!). Сумма в рублях, которую нужно получить с клиента или выдать клиенту в зависимости от типа операции считает система, опираясь на таблицу, в которой ведётся запись изменения курсов валют.
Вот. Теперь попробуйте на основе этих действий пересмотреть связи в Вашей схеме.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35769187
авторСоздать БД по валюте,
думается, что действия оператора при обращении клиента будут следующие (указаны основные):
- указать тип валюты
- указать тип операции (покупка, продажа)
- указать сумму в валюте
Дата и время операции - автоматически подставляется текущее (вот это слово!). Сумма в рублях, которую нужно получить с клиента или выдать клиенту в зависимости от типа операции считает система, опираясь на таблицу, в которой ведётся запись изменения курсов валют.
Вот. Теперь попробуйте на основе этих действий пересмотреть связи в Вашей схеме.

т е как понимаю, нужно подставлять в поле Operation.dateAndTimeOperation текущую дату (например используя функцию now() )и это поле вообще можно сделать readOnly. Ведь не может физически человек провести операцию за вчерашний день (задним числом не учитывать), только за текущий?

авторСумма в рублях, которую нужно получить с клиента или выдать клиенту в зависимости от типа операции считает система, опираясь на таблицу, в которой ведётся запись изменения курсов валют.
про сумму не понял, что вы имеете ввиду. Я понимаю что сумма должна пересчитываться, но как? Я предлагал указывать сумму операции в рублях (например покупка евро на 5000 рублей), но в этом случае что нужно пересчитывать? непонятно.

спасибо
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35769191
и еще такой вопрос: зачем столько курсов: по ЦБРФ и по учреждению? как понимаю все операции должны отталкиваться от курса установленным учреждением, а информация курса от ЦБРФ чисто для общего сопоставления чтоли?
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35772205
Фотография dmdx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бывший работник Банка могу сказать что для курсов тебе вполне подойдет вот такая табла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table course(
id number primary key,
typeCourse number,
curr1Iso number,
curr1Sum number( 9 , 4 ),
curr2iso number,
curr2sum number( 9 , 4 ),
datefrom date,
dateto date,
IsCurrenty char( 1 )
);
CourceType(
id number,
CurrType varchar2( 15 )
);
CurrIso(
id number,
CurrISO varchar( 3 ),
CurrNaim varchar( 15 )
);
Последний (course.IsCurrenty) кстати необязательно.
В тип будет писаться продажа или покупка курс ММВБ СБРФ.
в ISO будет писаться RUS LAT USD EUR и т.д
datefrom и dateto дата начала действия и окончания действия.
IsCurrenty можно использовать пи отборе текушего курса, но я бы отбирал все те где datefrom is null при заведении нового курса дата начала проставлять а дату окончания непроставлять. В общем есть что долби в личку или в асю на delphi есть что то подобное сейчас хочу сделать для PHP + ORACLE самые продукты для банка
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35772212
Фотография dmdx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать БД по валютеи еще такой вопрос: зачем столько курсов: по ЦБРФ и по учреждению? как понимаю все операции должны отталкиваться от курса установленным учреждением, а информация курса от ЦБРФ чисто для общего сопоставления чтоли?
Все операции должны отталкиваться от ЦБФР или ММВБ. все таки они тебе диктуют курс а не ты им.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35772224
Фотография dmdx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные о клиенте нужны. Но не кто операцию проводит, а с кем операция проводится. В банках при покупри свыше 500 $ или не помню в разных по разному надо заполнять ФИО и Паспорт Клиента. А если надо хранить кро заполнял то это можешь в общей таблице операция сделать поле usesr и понятно будет под кем заходили.
...
Рейтинг: 0 / 0
спроектировать БД для учета валюты
    #35772258
Фотография dmdx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать БД по валюте как понимаю все операции должны отталкиваться от курса установленным учреждением, а информация курса от ЦБРФ
Учреждения устанавливают курс согласно ЦБРФ или еще чего... А операции должны отталкиваться от того что к тебе (вам) пришел клиент общая таблица должна быть примерно след вида.
Тип операции (покупка, продажа, (тип ссылка)
конверсия(меняю баксы на еврики)), (тип ссылка)
Дата операции, тип валюты 1 (от клиента), (тип дата время). Обрати внимание что время тоже за день может меняться курс несколько раз
сумма валюты, (тип сумма)
сумма эквивалента в нац валюте (вот для этого и надо курсы и все), (тип сумма)
тип валюты 2 (для клиента), (тип ссылка)
сумма валюты, сумма в эквивалента в нац валюте (в нашем случае в рублях), (тип сумма)
кто сделал операцию, (users)
клиент (ссылка) если клиент постоянный то проще выбрать из справочника.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / спроектировать БД для учета валюты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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