Страница 1 из 2

Правильная организация базы данных

Добавлено: 19 окт 2012, 11:41
Softvok
Здравствуйте. Возник вопрос. как правильно организовать базу данных SQLite? Использоваться в приложении будет уже готовая база, созданная и заполненная на ПК.
Структура базы будет такова:
Страна:
-Россия
---Амурская область
-----Благовещенск
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
-----Завитинск
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
---Пермская область
-----Пермь
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
-----Краснокамск
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
-----......
-Украина
---Автономная Республика Крым
-----Алушта
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
-----Феодосия
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
---Винницкая область
-----Винница
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
-----Хмельник
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
---Волынская область
-----Луцк
--------Объект, Адрес, Заметка, Оценка
--------Объект, Адрес, Заметка, Оценка
---....

А приложение будет вытягивать данные объекта (Объект, Адрес, Заметка, Оценка), и отображать их на экране. Каким образом сделать такие "вложения" SQLite на компьютере?

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 11:53
rezak90
раскройте вопрос. Вас интересует структура бд?

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 12:01
Softvok
да. как правильно связать в базе данные. К примеру что к России относятся Амурская область и Пермская область, но никак не Винницкая область. К Амурской области относятся Благовещенск, Завитинск и тд. И в каждом из них есть множество объектов с данными (Объект, Адрес, Заметка, Оценка). Как это все правильно организовать,чтобы потом проще было вносить новые данные с ПК, ну и отображать эту инфу в приложении?

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 12:45
rezak90
нужно разбить на несколько сущностей, и получится несколько таблиц:
table name: cuntry
column:
id_country int primary key auto_increment not null,
cuntry_name varchar[10] not null

table name: region
column:
id_region int primary key auto_increment not null,
id_country int foreign key not null,
region_name varchar[20] not null

table name: city
id_city int primary key auto_increment not null,
id_region int foreign key not null,
city_name varchar[20] not null

table name: description
id_desc int primary key auto_increment not null,
id_city int foreign key not null,
object varchar[20] not null,
adres varchar[40] not null,
note varchar[50],
rating varchar[10] not null //может быть и int, я просто не знаю что у вас тута будет
Вот и будет 4 таблицы. Если спросите почему так много таблиц? То овтечу наперёд - нужно знать СУБД и СУРБД.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 14:32
Softvok
rezak90, благодарю! буду пробовать. Я так понимаю что создавать необходимо в SQLite Expert Personal 3?

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 14:52
rezak90
Softvok писал(а):rezak90, благодарю! буду пробовать. Я так понимаю что создавать необходимо в SQLite Expert Personal 3?
Это уже на ваше усмотрение где создавать, какой софт предпочитаете такой и используйте.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:29
AndreyI
У меня тоже есть вопрос по SQLite. Я не являюсь спецом по СУБД.
Есть база, записи с TEXT-овыми полями, их очень много. Нужно построить поиск записей с выборкой по первым буквам слов в полях определенного столбца. LIKE и MATCH работают не очень хорошо, у них нет таких возможностей как у RegExp (типа поиска по границам слов и пр.) поэтому в результаты попадает много лишнего, да и при больших размерах базы они работают медленно.
Есть идея добавить еще один столбец в который поместить что-то вроде "сигнатур" с начальными буквами слов, и поиск производить по нему, для этого написать скрипт, чтобы обработать базу, но у меня такое ощущение, что я изобретаю велосипед. Может есть какие встроенные средства SQLite , чтобы обойтись меньшей кровью? Конечно нужно, чтобы эти средства поддерживались в Android.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:35
rezak90
а почему бы не выгрузить всё в ArrayList<String> и в нём уже поиск осуществить?

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:37
AndreyI
Это будет занимать слишком много памяти, в базе десятки тысяч записей с длинными полями

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

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:39
rezak90
думаешь перебор в бд будет быстрее? будет но не на много что практически не заметно. Но...
Если уж зашла речь о таком количестве бд, то нужно использовать orm технологии. Есть прекрасная под андроид ormlite. Бесплатная и полно примеров. Сейчас посмотрю, но мне кажется даже LIKE умеет использовать регулярки. Вот нашёл: http://stackoverflow.com/questions/5071 ... lite-query

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:42
AndreyI
В LIKE я нашел маски только % и _ но как их сориентировать, чтобы поиск шел по границам слов пока не разобрался.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:44
rezak90
по моему у них в доке чётко и красиво с примерами написано:
http://www.sqlite.org/lang_expr.html

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:45
AndreyI
rezak90 писал(а):думаешь перебор в бд будет быстрее? будет но не на много что практически не заметно. Но...
Если уж зашла речь о таком количестве бд, то нужно использовать orm технологии. Есть прекрасная под андроид ormlite. Бесплатная и полно примеров. Сейчас посмотрю, но мне кажется даже LIKE умеет использовать регулярки. Вот нашёл: http://stackoverflow.com/questions/5071 ... lite-query
Осталось выяснить поддерживается ли это в Android, что-то мне подсказывает что нет

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:46
rezak90
поддерживает, sqlite одна везде.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:50
AndreyI
Не все функции SQLite поддерживаются в Android особенно это касается расширенных.
http://www.sqlite.org/lang_expr.html#regexp
No regexp() user function is defined by default and so use of the REGEXP operator will normally result in an error message. If a application-defined SQL function named "regexp" is added at run-time, that function will be called in order to implement the REGEXP operator.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:52
rezak90
ну хотя бы попробуй. Но всё таки взгляни на ormlite, по крайней мере скорость бд увеличится.

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 15:54
AndreyI
Хорошо, посмотрю

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 17:39
AndreyI
rezak90 писал(а):ну хотя бы попробуй.
Ну, собственно, как и ожидалось
E/AndroidRuntime(7873): FATAL EXCEPTION: main
E/AndroidRuntime(7873): android.database.sqlite.SQLiteException: no such function: REGEXP:

Re: Правильная организация базы данных

Добавлено: 19 окт 2012, 22:39
KamiSempai
Ну вы даете!!!
Для вырезания левых символов существует функция substr(X,Y). X - строка из которой вырезают, Y- количество символов.
Работает в разы быстрее LIKE. Забудьте вообще про этот LIKE, используйте его только когда по другому никак.

Re: Правильная организация базы данных

Добавлено: 20 окт 2012, 04:14
AndreyI
Ничего вырезать не нужно. Проблема вообще не в этом.
У меня тоже есть вопрос по SQLite. Я не являюсь спецом по СУБД.
Есть база, записи с TEXT-овыми полями, их очень много. Нужно построить поиск записей с выборкой по первым буквам слов в полях определенного столбца. LIKE и MATCH работают не очень хорошо, у них нет таких возможностей как у RegExp (типа поиска по границам слов и пр.) поэтому в результаты попадает много лишнего, да и при больших размерах базы они работают медленно.
Есть идея добавить еще один столбец в который поместить что-то вроде "сигнатур" с начальными буквами слов, и поиск производить по нему, для этого написать скрипт, чтобы обработать базу, но у меня такое ощущение, что я изобретаю велосипед. Может есть какие встроенные средства SQLite , чтобы обойтись меньшей кровью? Конечно нужно, чтобы эти средства поддерживались в Android.