#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. Бердвотчер-любитель со стажем, если что ;)