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

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Softvok
Сообщения: 5
Зарегистрирован: 19 окт 2012, 01:48
Откуда: Ukraine
Контактная информация:

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

Сообщение Softvok » 19 окт 2012, 11:41

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

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 11:53

раскройте вопрос. Вас интересует структура бд?
R.id.team
Политика на форуме запрещена

Softvok
Сообщения: 5
Зарегистрирован: 19 окт 2012, 01:48
Откуда: Ukraine
Контактная информация:

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

Сообщение Softvok » 19 окт 2012, 12:01

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 12:45

нужно разбить на несколько сущностей, и получится несколько таблиц:
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 таблицы. Если спросите почему так много таблиц? То овтечу наперёд - нужно знать СУБД и СУРБД.
R.id.team
Политика на форуме запрещена

Softvok
Сообщения: 5
Зарегистрирован: 19 окт 2012, 01:48
Откуда: Ukraine
Контактная информация:

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

Сообщение Softvok » 19 окт 2012, 14:32

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 14:52

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 15:29

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 15:35

а почему бы не выгрузить всё в ArrayList<String> и в нём уже поиск осуществить?
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 15:37

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

Да и разумно будет использовать средства SQLite, если таковые имеются т.к. сам движок достаточно шустрый.
Последний раз редактировалось AndreyI 19 окт 2012, 15:39, всего редактировалось 1 раз.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 15:39

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 15:42

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 15:44

по моему у них в доке чётко и красиво с примерами написано:
http://www.sqlite.org/lang_expr.html
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 15:45

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 15:46

поддерживает, sqlite одна везде.
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 15:50

Не все функции 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.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 19 окт 2012, 15:52

ну хотя бы попробуй. Но всё таки взгляни на ormlite, по крайней мере скорость бд увеличится.
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 15:54

Хорошо, посмотрю

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 19 окт 2012, 17:39

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

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

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

Сообщение KamiSempai » 19 окт 2012, 22:39

Ну вы даете!!!
Для вырезания левых символов существует функция substr(X,Y). X - строка из которой вырезают, Y- количество символов.
Работает в разы быстрее LIKE. Забудьте вообще про этот LIKE, используйте его только когда по другому никак.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 20 окт 2012, 04:14

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

Ответить