Есть таблица прогноз погоды.
100 городов и у каждого свой прогноз на завтра, своя влажность и давление
Тут все понятно. Колонки - это Город, температура, влажность, давление, дата и в них заполняем все города.
Но завтра у нас будут все новые значения для каждого города. Куда их заполнять? Все в те же колонки, но с другой датой? Правильно ли так делать?
Формат, который Вы предложили, называется полностью денормализованным. 100 записей на каждый день -
это сущий пустяк для любой популярной базы данных. Даже если вы собираетесь хранить данные за 1000 лет.
Если Вы хотите сделать доступ очень-очень быстрым, а ваша выборка чаще всего происходит по городу и дате, Вы можете добавить вторичный ключ либо на оба поля, либо только на дату.
City(Id, Name) - справочник городов
Parameter(Id, Name) - справочник параметров
ParamVal(param_id, city_id, date, val) - значения параметров с привязкой к городам и датам
Спасибо. Как я понял в таблице ParamVal у нас будут все значения параметров с разными датами в куче.
Если мы хотим получить 1 параметр за прошедший месяц по конкретному городу, то просто делаем select города по ключу city_id и Select Parametr по ключу param_id и поиск по дате.
А поиск по ключу делается для того, чтобы был поиск по цифрам, а не по буквам, и это будет намного быстрее.
Я верно понял Вашу идею?
И еще тогда вопрос. Как быть, если нужно выбирать по параметрам несколько городов и делать математические операции с их параметрами и где-то фиксировать потом их результат на будущее. Например считать среднюю температуру в городе за прошедший месяц. Ее нужно будет тоже записать в таблицу.
Можно ли сделать отдельную таблицу My_cities и вписать туда только требуемые параметры из таблицы City, а также новые параметры, которые мы получим в результате расчетов с исходными +новые более детальные параметры, которых нет в основной таблице по всем городам?
В любом случае спасибо за помощь.
EVGENY T., А подскажите пожалуйста, какой тип данных ставить в таблице City Для id?
Я ставлю тип Serial, чтобы Id автоматически увеличивался на 1, но Postgres меняет его на integer, и мне не удается присвоить первичный ключ этой колонке.
EVGENY T., В общем я делаю вот так и все будет хорошо?
И сколько бы я не добавил потом строк в данную таблицу, я могу не указывать колонку ID, она всегда будет сама прибавляться.
CREATE TABLE COMPANY(
ID SERIAL PRIMARY KEY,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Allen', 25, 'Texas', 15000.00 );
EVGENY T., С датой и временем конечно несколько часов разбирался, пока не получилось настроить верный формат. Очень помогла Pgcli -командная строка с подсветкой синтаксиса. В книге Васильева о ней прочитал, мега удобная. А вы пользуетесь какими-либо доп. утилитами для Postgresql?