powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Какой вариант структуры таблицы предпочтительнее
17 сообщений из 17, страница 1 из 1
Какой вариант структуры таблицы предпочтительнее
    #38390777
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть задача хранить различные метеорологические данные — температуру, давление, влажность, ветер и т.п.
Для простоты все эти данные я буду перечислять списком <measures>.
Данные привязаны к определенным точкам; в разных местах города могут быть разные погодные условия. При получении метеорологических данных для определенных координат будет выбираться наиболее близкая точка, возможно будет использоваться интерполяция некоторых данных.
Какой вариант таблицы с измерениями вы бы выбрали?

location_id, datetime, <measure>
Предполагается, что будет использоваться таблица мест измерений locations и подчиненная таблица измерений measures с указанными полями. Каждое измерение привязано к своему месту измерения. Но если вдруг происходят изменения с местами измерений (добавляется новое или убирается существующее), то нужно эти изменения отразить в таблице locations и возможно обновить таблицу measures. С другой стороны, при таком подходе для мест измерения можно хранить дополнительную информацию (класс точности, контактная информация и т.п.).


latitude, longitude, datetime, <measure>
Место измерения фиксируется непосредственно в таблице измерений. Часть данных в таблице может дублироваться (одинаковые координаты), однако при таком способе добавление или удаление места измерения будет происходить очень просто (если добавляется или удаляется метеорологическая станция, то никаких подготовительных процедур делать не нужно). Дополнительная информация по метеорологическим станциям будет храниться в отдельной таблице, напрямую никак не связанной с таблицей измерения (FK по полям latitude,longitude не используется).


latitude, longitude, range, datetime, <measure>
То же, что предыдущий пункт, но для измерения дополнительно указывается "радиус действия", в котором результаты не нуждаются в интерполяции.

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38390780
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще пара попутных вопросов. БД пока не определена, но допустим это будет MSSQL.
1. Нужно ли заводить кластерный индекс по datetime?
2. Допустим, суррогатный первичный ключ применяться не будет. В каком порядке включать поля в PK? Или это не важно?
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38391410
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну первый вариант однозначно более соответвует нормальной форме то бишь для первого приближения годится лучше.
Мне понравились отличия второго и третьего варианта: вы вводите дополнительную сущность range и спрашиваете у нас нужна ли она вам .
Далее место измерения удалятся не должно (кроме случаев явной ошибки).
Неплохо бы вместо latitude, longitude добавить spatial поле
http://technet.microsoft.com/en-us/library/bb933790.aspx
тогда вы можете привязать к вашей базе ГИС систему, отображать на карте и т.п.

Alibek B. 2. Допустим, суррогатный первичный ключ применяться не будет. В каком порядке включать поля в PK? Или это не важно?
Для целей PK (однозначно идентифицировать запись) это не важно, но есть нюанс.
Какой запрос для вас важнее - когда и какое было последнее измерение на этом месте или сколько и каких измерений было сделано вчера в час для.

Итого - без списка запросов информации недостаточно, но глянув в хрустальный шар исходя из природы данных можно предложить кластерный индекс по дате измерения и ай-ди места плюс дополнительный индекс по месту измерения если он нужен.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38391420
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Какой вариант таблицы с измерениями вы бы выбрали?Зависит от того, есть ли реальная бизнес-сущность "место измерения" (например, если измерения делаются с машины в процессе движения, то такой сущности нет).

Если есть, то первый вариант.

Если нет, то второй.

Насчёт третьего варианта - это в принципе второй вариант и есть, а дополнительные атрибуты - это уже отдельный вопрос, там же можно придумать и ещё что то, кроме радиуса.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38391425
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.2. Допустим, суррогатный первичный ключ применяться не будет. В каком порядке включать поля в PK? Или это не важно?Зависит от обращений к данным, могут быть разные варианты.

Но я бы сделал суррогатный ключ.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38391432
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До тех пор, пока метеостанция не оборудована колёсами, второй-третий варианты представляются геморроем на пустом месте. Особенно второй - стоит только попытаться понять, как будет выглядеть типовой запрос к этим данным, чтобы задаться вопросом "Зачем?" Впрочем, если подумать чуть дальше, окажется, что третий ничем от него не отличается.

Если задаться вопросом "как правильно и быстро выдавать информацию по погоде в указанной точке", то я бы завёл примерно следующую таблицу: longitude_from, longutude_to, latitude_from, latitude_to, location_1, location_2, location_3. Читается так: "для координат из этого квадрата использовать интерполяцию по данным следующих трёх станций (либо двух или одной, если некоторые не заданы".

Если нас интересует ретроспектива, то, конечно, следует озаботиться историчностью данных метеостанций и разбиения соответственно.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38391748
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый пример может быть и более нормализован, но это означает что кроме процедуры "сохранить в базу результаты измерений" нужно выполнять и процедуру "добавить в базу новую метеостанцию, если ее нет".

Да, я забыл рассказать о характере использования.
В базу ежечасно будут сохраняться результаты метеорологических измерений. Измерения принадлежат метеостанции, метеостанция имеет определенные координаты, в одном населенном пункте может быть несколько метеостанций. У метеостанции также имеется высота над уровнем моря (и теоретически, по одним координатам может быть несколько метеостанций с разной высотой).
Основные процедуры работы с БД: сохранение результатом измерений для определенной метеостанции в определенное время и получение результатов измерений с определенной метеостанции за указанный период.

softwarerДо тех пор, пока метеостанция не оборудована колёсами, второй-третий варианты представляются геморроем на пустом месте.
Ну почему же, сегодня открылась одна метеостанция, через полгода закрылась другая метеостанция.
Первый вариант, помимо усложнения сценариев работы (добавления новой метеостанции, если ее еще нет) добавляет лишний джойн в запросы. Во втором варианте координаты можно рассматривать как составной ключ, они ведь всегда будут задаваться парой.

softwarerЕсли задаться вопросом "как правильно и быстро выдавать информацию по погоде в указанной точке", то я бы завёл примерно следующую таблицу: longitude_from, longutude_to, latitude_from, latitude_to, location_1, location_2, location_3. Читается так: "для координат из этого квадрата использовать интерполяцию по данным следующих трёх станций (либо двух или одной, если некоторые не заданы".
Да, вариант интересный, подумаю над ним. Правда сектора лучше хранить в отдельной таблице, а в таблице интерполяций хранить поля sector_id,location_1,location_2,location_3. Но сложный в реализации, особенно запутанной будет процедура перераспределения секторов при добавлении новой метеостанции.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38391753
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.softwarerЕсли задаться вопросом "как правильно и быстро выдавать информацию по погоде в указанной точке", то я бы завёл примерно следующую таблицу: longitude_from, longutude_to, latitude_from, latitude_to, location_1, location_2, location_3. Читается так: "для координат из этого квадрата использовать интерполяцию по данным следующих трёх станций (либо двух или одной, если некоторые не заданы".
Да, вариант интересный, подумаю над ним. Правда сектора лучше хранить в отдельной таблице, а в таблице интерполяций хранить поля sector_id,location_1,location_2,location_3. Но сложный в реализации, особенно запутанной будет процедура перераспределения секторов при добавлении новой метеостанции.

Подумал и решил, что это неправильное направление, введение лишней сущности.
Таблицу секторов придется сделать исторической, чтобы для интерполяции результатов брать измерения тех метеостанций, которые на этот момент работали. Для интерполяции результатов лучше выбирать ближайшие к интересующей точке метеостанции, которые работали на момент запроса.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38392035
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Привет :)

Имхо, таблицу станций стоит делать, если менее 30% измерений имеют уникальные координаты. Соотв-но, долгота, широта, охват и прочее - это их атрибуты. Остальное уже к фактам измерений, да.

Насчет индексирования и прочее - тут очень сильно зависит от того, какие будут запросы. А учитывая, что выборки могут быть совершенно непредсказуемые, вполне возможно, что придется делать отдельный data mart с кучей преагрегированных срезов, сгруппированных по всем возможным (а иногда и невозможным :) ) критериям. Я сейчас посмотрел на сайте нашего метеорологического бюро, там реально можно любую статистику вытащить. А чтобы такое работало быстро, не то что одним индексом - одной таблицей не обойдешься.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38392615
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B. Основные процедуры работы с БД: сохранение результатом измерений для определенной метеостанции в определенное время и получение результатов измерений с определенной метеостанции за указанный период.То бишь у вас обычное OLTP приложение, а значит нормализуйте - база боится джойна не более чем еж голой задницы. Взамен получаете такую защиту от ошибок, что добавление новой станции никак не покажется усложнением работы.
Потом - будя возникнет необходимость статистики, выгружайте данные в хранилище, а это уже другая история.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38392778
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Измерения принадлежат метеостанции, метеостанция имеет определенные координаты, в одном населенном пункте может быть несколько метеостанций. У метеостанции также имеется высота над уровнем моря (и теоретически, по одним координатам может быть несколько метеостанций с разной высотой).
Основные процедуры работы с БД: сохранение результатом измерений для определенной метеостанции в определенное время и получение результатов измерений с определенной метеостанции за указанный период.Ну тогда без вариантов, первый вариант.
Alibek B.Первый вариант, помимо усложнения сценариев работы (добавления новой метеостанции, если ее еще нетНе пойму, что меняется для пользователя? Пользователь то откуда узнает, сколько там у вас таблиц, он что, будет сам кроить SQL -запросы?
Alibek B.добавляет лишний джойн в запросыЕщё разрабы с такими взглядами обычно делают текстовое поле, в которое суют все аттрибуты в виде текста через запятые :-)

Вы прислушайтесь к советам, тут всё таки форрум по проектированию БД. Не бойтесь лишних таблиц, могу вам сказать, что чем больше таблиц, тем проще будет писать код, легче поддерживать систему, да и работать всё это будет быстрее.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38393147
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.И еще пара попутных вопросов. БД пока не определена, но допустим это будет MSSQL.
1. Нужно ли заводить кластерный индекс по datetime?
2. Допустим, суррогатный первичный ключ применяться не будет. В каком порядке включать поля в PK? Или это не важно?

Ты написал много, но совсем не написал о предметной области.
А это главное, без знания ПО что-то говорить бессмысленно.


Я бы с первого взгляда делал таблицы так:
(PK)==> attributes
===========================

(location_id)==>latitude, longitude, name
(measure_id)==> meagure_name, ...
(location_id, measure_id, datetime) ==> value
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38393313
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ бы с первого взгляда делал таблицы так:
(PK)==> attributes
===========================

(location_id)==>latitude, longitude, name
(measure_id)==> meagure_name, ...
(location_id, measure_id, datetime) ==> value
EAV когда без него легко можно обойтись?
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38393336
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael , приветствую, с перездом!
Отдельная подготовленная БД для статистики и аналитики пока не нужна, со временем выявится, как ее лучше реализовать.
Большая часть измерений (более 90%) будут иметь уникальные координаты, т.е. совпадающих по координатам метеостанций будет мало (если вообще будут). Но измерения ежечасные и каждый год каждая координата будет получать по 8К записей.

SERG1257То бишь у вас обычное OLTP приложение, а значит нормализуйте - база боится джойна не более чем еж голой задницы.
alexeyvgВы прислушайтесь к советам, тут всё таки форрум по проектированию БД. Не бойтесь лишних таблиц, могу вам сказать, что чем больше таблиц, тем проще будет писать код, легче поддерживать систему, да и работать всё это будет быстрее.

Понятно.
Спасибо за комментарии, склонился к первому варианту.
Второй вариант я думал использовать по той причине, что по сути пара координат latitude,longitude уже представляют собой составной ключ.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38393405
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Второй вариант я думал использовать по той причине, что по сути пара координат latitude,longitude уже представляют собой составной ключ.
Естественный ключ - это геморрой. Составной ключ - это геморрой. Составной естественный ключ - геморрой в квадрате. Второй вариант чуть удобнее для задач наподобие "отобразить на карте измерения за утро пятого сентября", но чем дальше в лес, тем больше спотыкаться.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38393417
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Спасибо :)

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

EAV тут точно не нужен, мер не очень много и они довольно статичны.
...
Рейтинг: 0 / 0
Какой вариант структуры таблицы предпочтительнее
    #38393448
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Второй вариант я думал использовать по той причине, что по сути пара координат latitude,longitude уже представляют собой составной ключ.Теоретически да.

Но на практике...

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

Во вторых, пара координат - это просто координаты, некие значения. Вдруг выяснится, что их неточно записали?
Alibek B.Большая часть измерений (более 90%) будут иметь уникальные координаты, т.е. совпадающих по координатам метеостанций будет мало (если вообще будут).Тем более что координаты не однозначно определяют станцию, а вдруг вам эта информация понадобится, о метеостанции?
Ennor TiegaelЕсли 90% измерений будет на ходу, то конечно координаты нужно делать атрибутами измерения,Не, Alibek B. имеет в виду, что 10% метеостанций будет иметь совпадающие координаты, как я понял.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Какой вариант структуры таблицы предпочтительнее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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