Организация структуры базы данных как файловая система

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Организация структуры базы данных как файловая система

Сообщение ALX_2002 » 20.11.2005 (Вс) 23:26

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

Т.е чтобы можно было создавать
1) каталоги
2) подкаталоги
3) файлы
4) переходить по каталогам

Ну и т.п

Думаю какие таблицы нужны для этого.

(Конечная идея использовать базу на сервере для закачки файлов. Оформить хочется в виде проводника.) :roll:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.11.2005 (Пн) 9:10

Две таблицы, ITEMS и ATTRIBUTES.
Код: Выделить всё
ITEMS
-----
ID
ParentID
...


ATTRIBUTES
----------
ItemID
AttrName
AttrValue
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 21.11.2005 (Пн) 9:21

А может лучше XML? Кажеться именно это он и позволяет делать удобнее всего.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 21.11.2005 (Пн) 9:55

ANDLL писал(а):А может лучше XML? Кажеться именно это он и позволяет делать удобнее всего.


При чем тут XML?

Две таблички Folders и Files в любой базе данных. Поля табличек:

Таблица Folder:

ID_Folder
ID_Parent
FolderName

Таблица File:

ID_File
ID_Folder
FileName

Связки:

Folders.ID_Folder - Folders.ID_Parent
Folders.ID_Folder - Files.ID_Folder

Все.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.11.2005 (Пн) 10:20

Andrey Fedorov писал(а):Две таблички Folders и Files в любой базе данных.

А зачем разделять папки и файлы?
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 21.11.2005 (Пн) 10:22

alibek писал(а):
Andrey Fedorov писал(а):Две таблички Folders и Files в любой базе данных.

А зачем разделять папки и файлы?


Ну в реальной жизни в файлах кроме названия еще что-то хранится... В общем набор данных другой, отличный от папок.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.11.2005 (Пн) 11:14

В файлах могут храниться любые данные, в т.ч. и каталог папки.
Чтобы уж совсем приблизиться в файловой системе, я бы сделал так:
Код: Выделить всё
ITEMS
-----
ItemID Long
ParentID Long
Folder Boolean
Size Long
Name String
FullPath String
...


ATTRIBUTES
----------
ItemID Long
AttrName String
AttrValue String


ITEMDATA
--------
ItemID Long
Order Long
Data Binary*1024


Первая таблица -- оглавление (если папка) или информация о файле. Во второй храняться дополнительные данные (аттрибуты). А в третьей хранится содержимое файлов, блоками по одному килобайту. Если размер файла больше килобайта, то таких блоков будет несколько, причем Order определяет порядковый номер блоков. Ну а ITEMS.Size определяет размер файла.
Lasciate ogni speranza, voi ch'entrate.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 21.11.2005 (Пн) 18:11

Ага. Сделал всё - как описано. Пасиб за идею.

1) Создал 2 таблицы FOLDERS и FILES
2) В таблице FOLDERS создал поля FOLDERID, PARENTID, FOLDERNAME
3) В таблице FILES создал FILEID и FILENAME

Возникли следующие проблемы:

1) У меня FOLDERID и PARENTID связаны. Как сделать добавление первого элемента в случае если база пуста ? Т.к FOLDERID счётчик, то добавление PARENTID не удаётся сделать из-за отсутсвия разрешённых значений FOLDERID

2) Как сделать вывод каталогов по умолчанию ? Т.е если каталог для просмотра не указан ? :roll:

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 23.11.2005 (Ср) 20:21

1 - вноси по умолчанию в папки "корневую" папку, дочерними объектами которой будут все файлы и папки в корне твоей "файловой системы".
2 - то же самое. Выводиш все объекты, родителем которых является "корневая" папка.
То, что для одних константа, для других только переменная...

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 23.11.2005 (Ср) 20:24

1 - вноси по умолчанию в папки "корневую" папку, дочерними объектами которой будут все файлы и папки в корне твоей "файловой системы".
2 - то же самое. Выводиш все объекты, родителем которых является "корневая" папка.
То, что для одних константа, для других только переменная...

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 24.11.2005 (Чт) 1:40

Не. Я решил не париться. Просто у катлогов самого верхнего уровня сделал PARENTID 0

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.11.2005 (Чт) 9:15

Вообще-то, логичнее было бы делать ParentID = Null.
Lasciate ogni speranza, voi ch'entrate.

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 24.11.2005 (Чт) 11:40

А я бы сделал как alibek посоветовал.
Все запросы были бы универсальными, например:
Для получения списка: файлов или папок или всего вместе, можно воспользоваться одним запросом изменяя параметр Folder.

Так что поспешили вы, ALX_2002.
Пора уже всем хорошим людям собраться и убить всех плохих людей.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 24.11.2005 (Чт) 13:31

Вообще-то, логичнее было бы делать ParentID = Null


Гм...:

1) У меня FOLDERID и PARENTID связаны. Как сделать добавление первого элемента в случае если база пуста ? Т.к FOLDERID счётчик, то добавление PARENTID не удаётся сделать из-за отсутсвия разрешённых значений FOLDERID


Если таблицы связаны по первичному ключу, то вставить запись со сначением по ключевой колонке = null ну аж никак не получиться ;) Хотя это и не принципиально... Я бы вообще в этом случае не делал никаких ключей.
То, что для одних константа, для других только переменная...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 134

    TopList