Создание веб-интерфейса для построения генеалогических деревьев

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?, репликации, полностью соответствующее современным стандартам языка SQL (см. [9]), рекомендуется использовать PostgreSQL.хорошо использовать для простых запросов с отключенными транзакциями, в то время как PostgreSQL может поддерживать более серьезную нагрузку и сложные запросы параллельно с записью в базу данных. Ниша, которую занимает PostgreSQL, более широкая, и потенциал у PostgreSQL выше. Ниша MySQL скромнее, MySQL оправдывает себя как хранилище для некритичных по нагрузке и производительности баз данных.

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

В силу всего вышеперечисленного, в качестве реляционной базы данных решено использовать PostgreSQL (см. [10]).

 

1.4.2 Выбор нереляционной базы данных

 

В качестве нереляционной базы данных выбрана база CouchDB (см. [11]).

Основные характеристики этой базы:

-данные сохраняются не в строках и колонках, а в виде JSON-подобных документов, моделью которых является не таблицы, а деревья;

-целостность базы данных обеспечивается исключительно на уровне отдельных записей (но не на уровне связей между ними);

-для построения индексов и выполнения запросов используются функции представления;

-функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных;

-каждой базе данных в системе CouchDB соответствует единственное В-дерево; каждое B-дерево хранится в виде отдельного файла на диске;

-поддерживается вертикальная масштабируемость, что означает поддержку как огромных кластеров, так и портативных устройств.

Для манипуляций с данными используется JavaScript - объектно-ориентированный скриптовый язык программирования (см. [12]).

 

2. Описание базы данных

 

2.1. Реляционная база данных

 

Спроектирована реляционная база данных, состоящая из десяти таблиц (см. [13]).

 

2.1.1 Концептуальная схема базы данных

Концептуальная схема базы данных, отображающая взаимосвязи между таблицами, представлена на рис. 2.1.:

 

Рис. 2.1. Концептуальная схема базы данных

 

2.1.2 Описание назначения таблиц

Приведем описание таблиц:

-user - таблица хранит данные о пользователях (табл. 2.1.);

-region - таблица с названиями регионов (пример: Новосибирская область) (табл. 2.2.);

-region_area - таблица с названиями районов региона, пример: Коченевский район (Новосибирская область, Коченевский район) (табл. 2.3.);

-city - таблица с названиями городов/сел/поселков, принадлежащих району региона, пример: с. Прокудское (Новосибирская область, Коченевский район, с. Прокудское) (табл. 2.4.);

-city_area - таблица с названиями районов города, пример: Ленинский (Новосибирск, Ленинский район) (табл. 2.5.);

-media - таблица для хранения информации о мультимедийных данных (табл. 2.6.);

-photo - таблица для связи пользователей и фотографий, на которых они отмечены (табл. 2.7.);

-privilege - таблица для хранения информации о правах пользователей на генеалогические деревья других пользователей (табл. 2.8.);

-album - таблица для хранения информации о альбомах, предназначенных для хранения фотографий (табл. 2.9.);

-media_to_album - таблица для хранения связей между фотографиями и альбомами (табл. 2.10.).

С описанием структур перечисленных выше таблиц можно ознакомиться в Приложении А.

 

2.2 Нереляционная база данных

 

2.2.1 Описание структуры документов

Нереляционная база данных будет хранить документы следующего вида:

tree = {: [_0,

...,_N,

],: [_0,

...,_N,

],_id: int,_date: date,_date: date,: string,

},

где для упрощения представления вынесем отдельно описание FAMILY_K и PEOPLE_K:

-FAMILY_K = {"id": int, "hasbent": int, "wife": int, "children": list, "parent_families": list, "child_families": list}

-PEOPLE_K = {"id": int, "lastname": string, "name": string, "patronymic": string, "sex": string, "birthday": date, "deathdate": date, "parent_families": list, "self_families": list}

 

2.2.2 Описание назначения полей в документе

В документе будет храниться следующая информация о дереве:

-"owner_id": совпадает с id пользователя - создателя дерева;

-"create_date": содержит информацию о дате создания дерева;

-"update_date": содержит информацию о дате последнего изменения дерева;

-"revision": хранит идентификатор текущей ревизии;

-"families": коллекция семей, участвующих в дереве;

-"peoples": коллекция персон, участвующих в дереве.

Описание FAMILY_K:

-"id": хранит id семьи;

-"hasbent": хранит id персоны, которая является мужем семьи;

-"wife": хранит id персоны, которая является женой семьи;

-"children": хранит список, состоящий из id персон, являющихся детьми семьи;

-"parent_families": хранит список, состоящий из id семей, являющихся родительскими по отношению к мужу и жене семьи;

-"child_families": хранит список, состоящий из id семей, которые были образованы детьми семьи.

Описание PEOPLE_K:

-"id": хранит id персоны;

-"lastname": хранит фамилию персоны;

-"name": хранит имя персоны;

-"patronymic": хранит отчество персоны;

-"sex": хранит пол персоны;

-"birthday": хранит дату рождения персоны;

-"deathdate": хранит дату смерти персоны;

-"parent_families": хранит список, состоящий из id семей, являющихся родительскими по отношению к персоне;

-"self_families ": хр?/p>