Alex_289
Авг. 27, 2021 09:33:08
Всем привет! Подскажите куда копать, если в задаче стоит написание древовидного редактора с одним файлом базы данных, в котором каждая запись должна сохраняться отдельно и ее можно было бы привязать к любым веткам дерева одновременно.
PEHDOM
Авг. 27, 2021 12:07:09
Alex_289 а поподробнее? это будет приложение для ПК, смарфона, веб? какая ОС?
Ну а так смотрите в сторону встраиваемых СУБД типа sqlite, firebird embedded, Berkeley DB, embedded MySQL, или даже банально в ДБФ файле.
doza_and
Авг. 27, 2021 17:02:29
Alex_289
редактора с одним файлом базы данных,
Один файл у sqlite и у LMDB.
Alex_289
в котором каждая запись должна сохраняться отдельно и ее можно было бы привязать к любым веткам дерева одновременно
Понятие привязать очень расплывчатое. Вообще если ничего не уточняется про язык запросов и про ACID то можете просто взять файл формата hdf5. Там вам и дерево и возможности создавать связи и многопоточный доступ и файл там один.
py.user.next
Авг. 28, 2021 00:00:43
Alex_289
древовидного редактора с одним файлом базы данных, в котором каждая запись должна сохраняться отдельно и ее можно было бы привязать к любым веткам дерева одновременно
Тебе надо спроектировать базу данных, а потом уже реализовывать эту
спроектированную базу данных хоть на чём. Не думаю, что тебе устройство систем управления базами данных в этом хоть как-то поможет. Такую базу данных можно построить и в виде JSON-документа или просто текстового файла со своим форматом, но ты сам должен придумать, как будут связаны записи в этой базе данных. Система за тебя думать не будет.
Alex_289
Авг. 28, 2021 09:18:33
PEHDOM, doza_and, py.user.next спасибо за пояснения! Не ожидал, что вариантов так много. Попробую уточнить вопрос:
Приложение планируется для ПК под Windows и при этом оно должно быть портативным, то есть чтобы никаких дополнительных систем ставить не пришлось. И чтобы вся база для этой программы была бы в одном файле, который можно было бы легко запустить на любом компьютере с этой программой.
Это не какой-то заказ, давно искал нечто подобное в интернетах, а в итоге дошел до того, что решил попробовать написать сам и заодно попрактиковаться с питоном. С программирование немного знаком, а вот с базами не особо.
——————————————-
Если подробнее об идее программы, то она состоит в том, чтобы создать нечто подобное карманному справочнику, где слева было бы дерево с разделами, а справа записи, соответствующие выделенным разделам, но(!)… чтобы каждую запись можно было связать сразу с несколькими выбранными разделами (которые в свою очередь отображались бы в теле выбранной записи).
В качестве примера проще всего это наверное представить в виде справочника лекарств, где в дереве разделов были бы болезни, а в записях (заметках) лекарства. А на практике это выглядело бы так:
Создается заметка, например с описанием анальгина, а к ней привязывались бы разделы с названиями болезней при которых он помогает. Затем, еще какие-либо лекарства от головы в отдельных заметках и к каждой из них привязываем соответствующие разделы. И вот, заболела голова, кликаем по разделу “болит голова” получаем выборку ВСЕХ заметок, которые относятся к разделу “болит голова” и желательно в виде анонсов, которые можно развернуть по плюсику например…
Как-то так. Что то подобное реализовано на многих сайтах и интернет магазинах в частности, когда к одному товару привязываются сразу несколько различных категорий. Тот же ютуб позволяет также привязывать один ролик к различным плейлистам. Но вот портативной оффлайн программы с подобной функциональностью почему до сих пор не написано, вот я и решил попробовать сам.
Надеюсь на то что здесь мне помогут сразу выбрать правильное направление и в данный момент хотелось бы, чтобы просто ткнули в конкретную тему, которую мне необходимо изучить исходя из моих запросов. То есть, если для этого нужно изучать sqlite, значит буду изучать его, а если будет достаточно hdf5, значит hdf5. Если нужно самому что-то где-то проектировать, то где про это почитать?
p.s. В перспективе хотелось бы еще добавлять в программу различную дополнительную функциональность: максимально глубокая поддержка дочерних разделов, различные сортировки (выборка записей по самым различным параметрам, которые можно дополнительно им присваивать), расширенный поиск по БД, ведение хронологии заметок, автоподсказки при добавлении новых категорий к заметкам, форматирование текста, импорт html страниц, прикрепление файлов, защита данных паролем и тп.. и в данном случае на первом месте функциональность и надежность и только потом скорость. Пользователь БД - один.
py.user.next
Авг. 28, 2021 12:50:49
Alex_289
С программирование немного знаком, а вот с базами не особо.
Значит, не справишься. Потому что программы сложно писать. При этом если ничего не знаешь, то оно само не будет получаться. Программирование - это не волшебная палочка.
Alex_289
Если подробнее об идее программы, то она состоит в том, чтобы создать нечто подобное карманному справочнику, где слева было бы дерево с разделами, а справа записи, соответствующие выделенным разделам, но(!)… чтобы каждую запись можно было связать сразу с несколькими выбранными разделами (которые в свою очередь отображались бы в теле выбранной записи).
Ну, вот сделай окно такое и свяжи переключение в них с одного раздела на другой с отображением то одних заметок, то других. И ты увидишь, что ты не можешь это сделать. А это простейший элемент.
Alex_289
Авг. 28, 2021 12:56:37
py.user.next
Сейчас не сделаю, но я просто прошу задать мне направление в сторону каких БД смотреть, какой архитектуры, применительно к моей задаче.
doza_and
Авг. 28, 2021 17:12:02
Alex_289
Пользователь БД - один
Тогда при ваших запросах БД вообще не нужна. Можете держать данные в памяти и сохранять их на диск при помощи модуля pickle.
Вам важнее вырать GUI фреймворк. Я чаще пользуюсь wxPython.
А что таких приложений нет это неправда. Практически любой органайзер имеет перечисленный функционал.
Кстати вы не написали что хотите добавлять заметки из приложения. Если вы сделаете древовидное представление то очень скоро убедитесь что оно неудобно. Гораздо лучше таблицы или списки.
В том случае вам и программировать ничего не надо, достаточно статически связанных html страниц
py.user.next
Авг. 29, 2021 00:18:56
Alex_289
Сейчас не сделаю, но я просто прошу задать мне направление в сторону каких БД смотреть, какой архитектуры, применительно к моей задаче.
Ну, для этого подойдёт СУБД SQLite, например. И что дальше? Как тебе эта информация поможет создать редактор?
Это всё равно что ты бы спросил “скажите, как мне нарисовать кошку? прошу задать мне направление в сторону каких карандашей и красок смотреть, какой архитектуры”. Тебе говорят “ну, вот карандаш, рисуй кошку вот им как раз”. А что это даст?
Alex_289
Авг. 29, 2021 09:54:09
doza_and
Тогда при ваших запросах БД вообще не нужна. Можете держать данные в памяти и сохранять их на диск при помощи модуля pickle.
Предлагаете, хранить все заметки со всеми их полями и деревом разделов в одном текстовом файле? И при этом все это можно будет без проблем редактировать, перемещать, отбирать и сортировать?
doza_and
Вам важнее вырать GUI фреймворк. Я чаще пользуюсь wxPython.
С разработкой интерфейса я пока особых проблем не вижу и смотрю пока в сторону PyQt5 из-за наглядности. У wxPython есть какие-либо особые преимущества?
doza_and
А что таких приложений нет это неправда. Практически любой органайзер имеет перечисленный функционал.
Если вы про evernote и другие подобные ему редакторы, то это совсем не то. Это довольно сложные и интуитивно непонятные системы, больше основанные на тегах и поисковых возможностях, а не на разделах. И конкретно у меня с evernote все-равно получалась какая-то инфомусорка - никакой понятной структуры, проверенной практикой и временем, так и не получилось построить.
doza_and
Кстати вы не написали что хотите добавлять заметки из приложения. Если вы сделаете древовидное представление то очень скоро убедитесь что оно неудобно. Гораздо лучше таблицы или списки.
На самом деле перепробовал много чего, вплоть до того, что ставил на комп локальный сервер и пробовал юзать движок drupal для данных целей. Однако на практике вот уже более десяти лет пользуюсь программой
marsnotebook и мне такой способ структурирования информации подходит лучше всего. Вот только очень не хватает как раз возможности привязывать одну заметку сразу нескольким разделам, ну и еще кое каких плюшек хотелось бы. Программа написана на дельфи и именно она является для меня точкой отсчета - и древовидная и портативная и БД в 1 файле. Но автор к сожалению забросил ее, вот я и пытаюсь выяснить окольными путями, как он там БД организовал.