|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Универсальная модель базы данных
Есть идея, но не хватает опыта для осуществления. Если кому не лень, попробуйте написать, думаю, полезно будет многим.
Суть: Универсальная база данных для всех (или почти всех) задач. По своей организации похожа на файловую систему. Сама база состоит из нескольких таблиц 1. Таблица с объектами (файлы или папки) Состоит из ID, Имени объекта, типа объекта (папка/файл/корень), содержимое (перечислен список дочерних объектов, которые находятся непосредственно внутри текущего) 2. Таблица со свойствами объектов (атрибутов) ID, ID объекта, тип свойства (строка/картинка/иконка) Имя свойства, столбцы значений в зависимости от типа. 3. Таблица справочник типов (таких таблиц несколько, например одна для справочника типов объектов) 4. Таблица с содержимым ID, ID объекта, тип содержимого, далее поля в зависимости от типа содержимого (текстовое (МЕМО), картинка, строка)... можно обойтись одним или добавить еще при желании. Собственно трудность в создании класса, методами которого можно было бы управлять такой моделью. Я начинающий делфист, так что... Методами класса должно быть можно считать содержимое объекта, дочерние объекты, свойства (атрибуты) объекта. Смысл идеи в том, что такая модель может быть использована для любой программы, использующей базу данных (само собой небольших размеров, потому что база 10ГБ будет очень долго читаться). Нужно, например, вам сделать программу для учета инвентарных единиц. Там будут категории единиц (мебель, ПК (а тут есть и подкатегории), стредства гигиены) и сами единицы (файлы в модели, или один файл со списком единиц). Или у вас есть еще телефонный справочник организации. Можно хранить его базу все в той же базе, создав папки для каждой вашей программы. Кроме класса с методами для использования должна быть еще программа для администрирования базы данных, которая отобразит базу в виде дерева каталогов (как ShellTreeView) и позволит смотреть и изменять их содержимое и атрибуты, а так же содержимое файлов. Так же которая позволит делать самостоятельные бэкапы нужных категорий (каталогов) и восстанавливать их. Плюсы такой модели: Гибкость. Простота использования. Не требует от программиста умения работать с базами данных. Минусы: Не подходит для баз данных больших размеров. Будет нуждаться в обслуживании (удалении содержимого удаленных файлов (мало ли по какой причине ссылка на файл удалится, а содержимое останется)). |
#2
|
||||
|
||||
Нихрена не понял, на кой оно нужно?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Нужно это для того же, для чего программеры ушли от машинных кодов к языкам высокого уровня. А именно для упрощения работы.
Так же для упрощения администрирования базы. |
#4
|
||||
|
||||
MS Access?????
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
Желательно для MSSQL.
|
#6
|
||||
|
||||
Цитата:
|
#7
|
||||
|
||||
Цитата:
ID / Имя объекта / Тип объекта / содержит объекты (перечисление ИД) 1 / root / root / (2)(3) 2 / Catalog1 / Catalog / (5) 3 / Catalog2 / Catalog / (4)(6) 4 / Catalog3 / Catalog / (7) 5 / File1 / File / Null 6 / File2 / File / Null 7 / File3 / File / Null И означать это будет, что база содержит 3 файла: root/Catalog1/File1 root/Catalog2/File2 root/Catalog2/Catalog3/File3 |
#8
|
||||
|
||||
Цитата:
|
#9
|
||||
|
||||
Цитата:
По поводу отбора, тут все просто. Я ведь не зря поместил ИДшники в скобки, искать можно будет по лайку с жестким совпадением (поле содержит "(3)", например). |
#10
|
||||
|
||||
Цитата:
ID / Имя объекта / Тип объекта / ParentId 1 / root / root / Null 2 / Catalog1 / Catalog / 1 3 / Catalog2 / Catalog / 1 4 / Catalog3 / Catalog / 3 5 / File1 / File / 2 6 / File2 / File / 3 7 / File3 / File / 4 |
#11
|
||||
|
||||
Цитата:
Да да, именно так я и делал раньше для задания иерархии. И в данной модели можно сделать так же. Но вот именно для этой модели лучше использовать предложенную мной структуру ИМХО. Стыдно, но я не могу вспомнить, почему я пришел к такому выводу. Но пришел я к нему уже в процессе написания класса. Может и ошибся. |
#12
|
|||
|
|||
Цитата:
похоже на маршалинг/сериализацию то есть например есть objectlist, в нём другие objectlist-ы (типа папки) и объекты(файлы), всю гору объектов можно целиком сохранить/загрузить (xml/json), и без индексов есть ещё mongo, с индексами, своим языком запросов и нужно запускать отдельный процесс для сервера оба случая без фиксированной схемы и с любой вложенностью >woweook< |
#13
|
||||
|
||||
Цитата:
Несколько замечаний: 1) Если в твоей структуре удалить например "7 / File3", то потом ещё нужно найти папку в которой этот элемент находился (в данном случае это "4 / Catalog3") и у него редактировать текстовое поле (т.е. прочитать это значение, найти и удалить в нём подстроку "(7)" и потом записать назад этот обновлённый текст), а в правильном варианте ничего этого не нужно делать: удалили элемент "4 / Catalog3" - он автоматически пропадёт из папки "4 / Catalog3". 2) Если например удалить элемент "3 / Catalog2", то либо останутся файлы которые будут теперь нахидиться "нигде". Либо же нужно писать дополнительный код, который будет искать и удалять всё содержимое удалённой папки. В правильном же варианте, можно настроить связи (Relationship) между таблицами либо чтобы все подчинённые элементы автоматически удалялись вместе со своим владельцем, либо запрет удаления владельца который владеет хоть одним подчинённым элементом (т.е. на который ссылается хоть один элемент). Таким образом сохраняется целостность базы данных. |
#14
|
||||
|
||||
Цитата:
|
#15
|
|||
|
|||
честно говоря не знаю чем сейчас пользуются в дельфи, в рубях все используют или orm или подобные штуки (вот идеальный случай – описал объекты, отношения, и используешь их) в дельфи как я понимаю это делается через gui
а тс что хочет я не понял, можно взять на самом деле папки и файлы и вместо select использовать findfirst... >woweook< |