sash-kan писал(а): ↑03.04.2012 17:32
Stasroot1 писал(а): ↑03.04.2012 10:25
в меру того что я там понимаю сделал вот такую базу данных: 4-е таблицы: в одной данные о тренировке, во второй данные о кругах, в третьей данные о трекпоинтах, в четвертой данные для сопоставления номера тренировки номерам кругов в системе и номеру круга в конкретной тренировке.
как мне кажется, что-то здесь лишнее·
давайте с архитектурной точки зрения рассмотрим структуру базы·
1. какие сущности должны храниться в базе?
насколько я понимаю, примерно такие:
1.1. пользователи
1.2. тренировки
1.3. круги
1.4. замеры (trackpoints)
сущности связаны ключами отношением один-ко-многим (у каждого пользователя — свои тренировки, у каждой тренировки — свои круги, у каждого круга — свои замеры)·
пользователи уже есть (в drupal-е или что вы там собираетесь использовать в качестве фундамента), поэтому остаётся три сущности·
2. нужны ли в предложенном списке отдельные сущности для тренировок и кругов?
мне кажется, это просто специфика программы конкретного устройства, которым вы располагаете·
у вас нет возможности получить информацию из принципиально других устройств, служащих тем же целям? (наверняка ведь "garmin навигатор" совсем не уникален)
3. нужна ли сущность "устройство" (именно как отдельная сущность)? и нужна ли _вообще_ информация об устройстве?
По порядку.
1. Пользователи уже есть, да. Они в Drupal-e. Да сущьности связаны как дерево, один ко многим, вы правильно все понимаете.
2. Да специфика программы у каждого устройства есть (отличается между сериями устройств, т.е. разницу между разными устройствами серии garmin edge705 я не нашел, так же как и не нашел разницы между устройствами серии garmin 305, а вот разница между 705 и 305 есть) Специфика в том, что xml файлы с историей тренировок формируются чуть по разному и имеют разное расширение. А суть данных одинаковая. Эту проблему будем решать на уровне PHP разбором этих самых файлов, получением данных и отправке этих данных в соответствующие таблицы БД. По принципу: если файл с расширением *,a делаем так, если с расширением Б делаем так то, если иначе выводим сообщение о не поддержке такого формата, но это еще далеко, просто иметь ввиду.
У меня есть возможность получить файлы с данными с основных используемых устройств. И у меня сейчас есть такие данные, если интересно могу прикрепить.
Нужны ли в предложенном списке отдельные сущьности? Думаю да так как: спортсмен на разных тренировках может пользоваться разными устройствами, редко но такое бывает. Так же на основании этих данных в дальнейшем предполагаю проводить проверку подлинности устройства, т.е. за конкретным спортсменом крепиться конкретное устройство, и только с него он может заносить данные или крепиться несколько устройств. Тут еще надо поразмыслить, но скорее всего эти данные лучше хранить в специализированной таблице а не в таблице, например, про пользователя в системе Drupal. Но на данном этапе думаю часть данных о тренировке о круге можно для упрощения разработки исключить из набора необходимых данных, так сказать чтобы таблица была поменьше. Однако мне представляется возможным на уровне БД разрешить значение NULL на данном этапе, оставив сущьности в структуре БД и не удалять их из структуры предложенной мной чуть выше.
Однако у меня тоже есть сомнения по структуре, я например не очень представляю куда было бы логично записать данные о количестве кругов в тренировке, которое я вывел в отдельную таблицу, образовав тем самым дополнительную сущьность - уникальный круг в системе. Это я про таблицу: Garmin_Activities_Laps. Не появляется ли избыточность данных хранимых в БД, вроде нет, но и не совсем уверен в этом. Так же эту таблицу я привлекаю для как бы синхронизации что ли, Чтобы через эту таблицу проводить транзакционный запрос, т.е. в ней как бы собираются сводные данные (тренировка+круг+точка (точка не реализована)) Это для обеспечения целостности данных при внесении записи в таблицу о тренировке, а так же для предотвращения возможности внесения данных о круге или трекпоинте для не существующей в таблице о тренировках тренировки отдельным запросом SQL. Скорее всего я сильно усложняю задачу на данном этапе...
По второму пункту вроде все.
3. По этой части частично ответил во втором пункте. Добавляю: считаю что нужна так как не хочу отделять эту сущьность на уровень Drupal. Так как сначала хочу добиться работы отдельно от друпала и пока без примитивной пользовательской части, в последствии примитивненькую табличку соответствия пользователя и тренировки сделаем так, чтобы систему могли протестировать разные пользователи разных устройств уже в боевом режиме. Только потом адаптировать систему к Drupal. Думаю в этом мне смогут помочь члены сообщества Drupal как российского так и международного, слава богу с языком уже проблем почти нет. Разве что разговаривать на нем пока плохо получается, практики мало... :-( Извиняюсь за отход от темы.
Прикрепил на всякий случай файл с устройства Garmin 305 (как наручные часы) у меня к справке велокомпьютер считается (edge705).
Вот так как то постарался все описать что у меня в мозгах думается... Надеюсь не сильно запутанно. Спасибо за то, что принимаете участие и тратите на это свое драгоценное время. С уважением.