drBatty писал(а): ↑06.04.2012 11:41
sash-kan писал(а): ↑06.04.2012 11:31
в таблице замеров несколько больше, чем два поля — по крайней мере идентификатор круга, время, пульс и расстояние·
возможно, ещё координаты, и другая информация, извлекаемая из файла·
ну вот... Я же говорил - надо знать задачу... В таком случае отдельный primary key безусловно полезен.
sash-kan писал(а): ↑06.04.2012 11:31
а про скорость (кстати, скорость _чего_?) я лучше совсем промолчу…
скорость извлечения выборки например с 5й по 10ю минуту. Если у вас будет составной индекс, то эта скорость будет меньше. Наверное вдвое меньше (хотя это уже от реализации зависит - если там, в индексе всё равно 64х битные числа, то два 32х битных можно упаковать в одно).
С другой стороны, совсем непонятно в этом случае, зачем вам тут составной индекс? Логичнее сделать три индекса:
1. по primary key, зачем не знаю, сам создастся.
2. по временной не уникальной метке - для выборки по времени.
3. по расстоянию - для выборки по расстоянию.
Зачем мешать 1 и 2 - не очень понятно, если я правильно понимаю ТЗ, то время уникально для каждого круга. Если не уникально, то правильнее смешать в одном индексе 2 и 3. Наверное. Я не в курсе, как эти приборы работают...
Чувствую себя отсталым идиотом по двум причинам:
1. не пойму как комментировать часть поста а не весь пост. Кнопка "Цитата" работает не понятно, надо почитать как ей пользоваться в инструкциях.
2. Я еле еле поспеваю за ходом ваших мыслей, чувствуется что вы в вопросах БД и программирования разбираетесь лучше меня на порядки... но это тут я сам виноват, все таки спортсмен и основную часть времени трачу на тренировки и планирование, анализ. Спортивные теории и практики...
Мне отрадно что, тема вас двоих заинтересовала, тем не менее я хочу досконально разбираться в том что мы делаем и почему. Технические вопросы тестирование и все такое я с легкостью возьму на себя, вопросы программирования и составления БД естественно тоже на себя, так как пока это все нужно только мне, а вам ни какой коммерческой выгоды, может только спортивный интерес и моральное удовлетворение... Но по части кода и SQL мне нужны подсказки, толчки в нужное русло и так далее, Надеюсь вы мне и дальше продолжите подсказывать и помогать, если конечно это вас сильно не затруднит.
С уважением к вам двоим.
Теперь к сути вопросов...
sash-kan, вы понимаете проблемы очень хорошо как мне кажется. Что касается PK по pid в таблице t, то считаю это поле необходимым так как в дальнейшем предполагается использовать данные об отдельных наборах точек для составления и анализа отдельных частей тренировки с разными tid. И для хранения данных о точках в особо важных отрезках проведенной тренировки. Хранить эти особо важные точки (ссылки на этот pid) надо будет в соответствующей таблице, которой пока нет в нашей БД, чтобы не усложнять проект, это уже на следующем этапе так сказать.
Вы правильно понимаете, что делать таймштамп уникальным в таблице trekpoints (t) (поле времени) нельзя, и правильно связываете это с реальной возможностью совпадения времени у разных гребцов.
(пояснение для drBatty:даже если наши виртуальные 20 спортсменов, реально их больше, тех которые каждый день пользуются навигаторами (около 250-300 человек) запустят тренировку в РАЗНЫЕ временные промежутки, именно запустят, то при гранулярности в 1 секунду у них всегда будет разное время так как оно пишеться ориентируясь на СПУТНИКОВОЕ время из космоса (GMT) на всех устройствах течение времени СИНХРОННО это по технологии позиционирования навигаторов на местности. Если предположить, что во время тренировки НИКТО не остановит свой таймер, то уникальность сохраниться до конца тренировки. В реальности такого почти не бывает так как спортсмены довольно часто пользуются кнопкой stop на навигаторе А это значит, что именно время записываемое далее может сбиваться и таким образом может появиться таймштамп с одинаковым временем , в результате могут начаться проблемы построения графиков, например точка от одного спортсмена может стать точкой другого спортсмена а это будет значить что как минимум какой то из спортсменов по ошибке в архитектуре хранения данных получит пиковое ускорение скажем до 1500 км/час (вдруг пересекающийся спортсмен был в другой точке Земли) В результате анализ сбивается... Постарался поподробнее)
Теперь как работает устройство, вернее устройства:
В космосе есть спутники они постоянно синхронизируются между собой и с атомным временем. На них всегда GMT там нет поправок на часовые пояса. Спутники находятся на геостационарной орбите, или нет, в общем это не важно, они отправляют на Землю сигнал с координатами своего положения и ТОЧНОЕ время. Для работы навигатора, любого, в том числе спортивного надо минимум три спутника, получив данные о координатах с этих спутников навигатор высчитывает свое положение, к слову высчитывает он его чаще чем рас в секунду, чипсэт это определяет. Так вот мой навигатор и другие спортивные навигаторы пишут инфу о координатах и времени каждую секунду, не чаще. (ну так вот они запрограммированы). Мой например еще при этом успевает посчитать перемещение и тоже пишет эту инфу в файл. Все вроде. Таким образом у нас нет возможности не перепрограммируя навигатор получить время чаще и координат больше. По сути все.
Скорее всего ответил не на все возникшие вопросы, не мог нормально писать сообщение, постоянно отрывали звонками, так что надеюсь не слишком рваная мысль получилась.
Сейчас бегу на тренировку после внимательно все что вы написали прочитаю и может еще что то добавлю от себя.
На данный момент чуть переделал ключи и исправил кое какие ошибки в структуре и создал дамп с данными для загрузки. Оба файла прикрепляю сюда.
Схема БД SQL.
Импортируемые данные (внутри коменты импортируемых данных):
Импорт данных транзакцией.