Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Как правильно в модели базы данных связывать (хранить) данные о наблюдений за птицами?

#sql #база_данных #модель_данных


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

Примеры данных наблюдений:


10.10.18 Андрей наблюдает среднюю стаю
11.10.18 Дмитрий наблюдает большую стаю, в стае имеются вороны, сороки
12.10.18 Дмитрий наблюдает среднюю стаю и большую стаю
12.10.18 Антон наблюдает ворон, аистов.


Выделил таблицы:


Виды птиц
Размер стаи
Тип объекта (Стая/Птица)
Источник наблюдений


Нужна таблица, в которой фиксировалась бы данные наблюдений. 


Не могу сообразить, как это сделать. Как будто я что-то упустил.
Не могу понять, как сделать так, чтобы можно было фиксировать:


размер стаи
размер стаи + виды птиц в стае
так и отдельно виды птиц



Подскажите пожалуйста.

    


Ответы

Ответ 1



Вам нужно завести еще одну таблицу Факты, которая связана с таблицей наблюдений как 1 ко многим: В этом случае каждая запись в таблице факты с идентификатором конкретного наблюдения будет означать что там увидели еще Если в таблице Факты будут 4 записи с одинаковым идентификатором наблюдения со ссылками на размер стаи, на вид птицы вороны, аисты и сороки. Тогда это будет трактоваться так: 11.10.18 Дмитрий наблюдает большую стаю, в стае имеются вороны, аисты и сороки

Ответ 2



Вам нужно создать таблицу "Объект наблюдения" в которой создать поля для храниеия ID стаи, ID птицы, размер стаи, тип объекта (стая или птица). Потом ID этой таблицы вписавать в "Данные наблюдений".

Ответ 3



Мне кажется, наблюдения лучше сделать немного более детальными. Одна запись наблюдения - один вид. Также добавить поля "количество", "пол" и "возраст". Возраст точно определить нельзя, но птенцы всегда отличаются от родителей, а иногда и взрослые птицы долго не меняют подростковую окраску. Например, бакланы и лебеди в возрасте около года примерно отличаются по окраске от взрослых, но не отличаются по размеру. Значения там будут примерно такие: птенец подросток взрослая особь В базах наблюдений, с которыми я имел дело, обычно какое-то такое поле есть. Если точное количество неизвестно, можно добавить справочное поле "размер стаи" с вариантами, например, 1 - 10, 10 - 50, 50 - 100, больше 100. И заполнять либо точное количество, либо приблизительное. Но обычно с подсчетом проблем не возникает: на практике большинство наблюдателей просто делает фото, а дома, в спокойной обстановке, вооружившись фотошопом, пересчитывает. Ну и дополнительные поля типа даты, времени, координат и т. п. Это будет сущность "наблюдение птицы" (или факт, как Barmaley предложил), а несколько таких наблюдений, сделанных за один выезд "в поле", объединять в сущность "наблюдение". UPD. Добавлю схему: И немного пояснений. "Сессия наблюдений" (observation_session) - это один "заход". Например, наблюдатель Маша Иванова 01.01.2018 выехала в поле и два часа шла из пункта А в пункт Б, делая наблюдения. Этому событию соответствует одна запись в этой таблице. Далее каждая встреченная во время этой сессии наблюдений птица заносится отдельной строкой в таблицу observation. Из справочников подтягиваются пояснения - какой вид, сколько птиц, и так далее. Если точное количество установить не удается, можно записывать приблизительное из справочника bird_group, но я честно говоря не представляю, что вы с ним потом будете делать. Потому что по факту это количество, но работать с полем как с числом вы не сможете, только делать оценки уровня "плюс-минус километр". P. S. Бердвотчер-любитель со стажем, если что ;)

Комментариев нет:

Отправить комментарий