2014-01-31 2 views
0

Я создаю сайт, на котором используется API openexchangerates.org.Проект базы данных Mysql для обмена ссылками на веб-сайте

API-интерфейс возвращает ответ JSON, который выглядит как:

{ 
    "timestamp": 1391191261, 
    "base": "USD", 
    "rates": { 
    "AED": 3.67328, 
    "AFN": 56.4876, 
    "ALL": 103.8916, 
    "AMD": 411.612997, 
    /* 165 currencies */ 
    "YER": 215.057, 
    "ZAR": 11.14973, 
    "ZMK": 5253.075255, 
    "ZMW": 5.579003, 
    "ZWL": 322.355006 
    } 
} 

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

Таблица:

curency \ rate \ date 

AED  \ 3.67328 \ 31-01-2014 
AFN  \ 56.4876 \ 31-01-2014 

\* and so on for this date... then older rates for past dates *\ 

AED  \ 3.12367 \ 30-01-2014 
AFN  \ 55.2345 \ 30-01-2014 

Это хороший дизайн базы данных? Что еще я должен делать?

ответ

1

Вы должны использовать таблицу, как это:

id | currency | rate | start-date 

Когда вы ищете для валюты, вы просто должны посмотреть запись с правильной датой (последний запуск даты, что еще раньше чем дата, которую вы ищете).

Выбрать: SELECT * FROM table WHERE date < searchDate ORDER BY date DESC LIMIT 1;

Если изменения скорости, у вас есть только добавить новую строку с текущей SYSDATE.

Выбрать: INSERT INTO table VALUES (id, 'EUR', '1.4', SYSDATE);

Так что да, я думаю, что эта таблица является идеальным.

BUT: Проблема может возникнуть, если вы удаляете записи - и вдруг нет строк с «USD», и ваша база данных забыли о US-Dollar.

Давайте посмотрим на пример - мы знаем, 2 валюты, и хранить его в таблице:

id | currency | rate | start-date 
--------------------------------- 
1 USD  1  1.1.1970 
2 EUR  2  1.1.1970 
3 EUR  3  5.1.1970 

Если мы хотим, чтобы удалить первую запись (USD), мы можем сделать это. Проблема заключается в том, что у нас больше нет записи с долларом, и наша база данных хранит только ставки за 1 валюту.

В этом случае вы можете использовать 2 таблицы с внешним ключом.

Смотрите этот пример:

Таблица 1:

id | currency 

таблица 2:

id | fk_currency | rate | start-date 

Первой таблица хранит все валюты, которые доклад доступны. А вторая таблица хранит ставку. Столбец fk_currency является внешним ключом таблицы 1 и содержит идентификатор валюты.

Если мы удалим ставку из таблицы2, мы сохраним валюту, хранящуюся в другой таблице. База данных не забывала об этом.

+1

Я не думаю, что вы хотите, чтобы «самая ранняя дата начала была выше даты, которую вы ищете». Я думаю, вы хотите, чтобы «последняя дата начала была ниже или равна дате, которую вы ищете». Кроме того, вы всегда выбираете ставки, которых еще не было. –

+0

Привет, спасибо за ваш ответ. Я не понял, как использовать эти две таблицы. Можете ли вы объяснить мне немного больше? Что такое «fk_currency» и «дата начала»? Вы можете добавить некоторые значения в таблицы, чтобы понять, как они связаны? Я действительно не понимаю, как связаны таблицы. – m3tsys

+0

@AlexHowansky Спасибо, ты прав. Я обновил ответ – maja

Смежные вопросы