Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Chainiku
Зарегистрирован: 12.02.2004 Сообщения: 3
|
Добавлено: Чт Фев 12 2004 23:58 Заголовок сообщения: Как создать свою собственную базу данных? |
|
|
Задача: Необходимо создать базу данных, не используя BDE, SQL и т.д. Изучаю Дельфи.
Как создать свою собственную базу данных? Где можно почитать в сети на эту тему?
Где посмотреть примеры кода? Если данных очень много, как их расположить в памяти?
К примеру более чем 2000 сотрудников – фамилии, зарплата. Нужно ли запихивать все данные в память, чтобы перемещаться по ним и оперировать более быстро с возможными модификациями? А может быть загружать в память только одну фамилию с зарплатой, позицируя в файле на необходимые данные и в случае их изменения сразу проводить перезапись файла? Я очень мало знаю про все это. Помогите "чайнику" – пытающемуся вырасти до "котла".
Совет о вновь изобретаемом велосипеде недавать . |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
wildwind
Зарегистрирован: 03.02.2004 Сообщения: 268 Откуда: Москва
|
Добавлено: Пт Фев 13 2004 12:29 Заголовок сообщения: |
|
|
Это даже хорошо, что ты считаешь себя "чайником". Вот мой совет. Не ищи советов всяких там котлов и самоваров. Думай! У тебя есть великолепная возможность все ключевые решения принимать самому. И потом с гордостью сказать: "Эту базу данных я сделал сам!". К тому же есть вероятность, что тебе удастся изобрести нечто принципиально новое и оригинальное.
А план может быть такой.
Во-первых, определи, для каких задач будет использоваться твоя база. Какими объемами данных ворочать и в какой среде будет работать. Все это бери не с потолка, а из жизни. Запиши все на бумаге (то есть в Notepad'е )
Во-вторых, продумай внутреннюю и внешнюю организацию данных, ориентируясь на первый пункт. Чем проще она будет, тем лучше будет работать. Не пытайся копировать форматы DBF, Access или какие-либо еще. Опять же все подробно запиши.
В-третьих, прикинь, какими минимальными средствами Дельфи можно реализовать все то, что ты напридумывал на втором этапе. Если известных тебе средств не хватит, копайся в доке и VCL, там есть много полезного.
В-четвертых, запасись терпением, едой, пивом, и вперед - кодировать! И тестировать. И помни - чем проще, тем лучше.
А почитать можно например здесь, на ЦИТФоруме: СУБД / Учебные пособия и обзоры / Основы современных баз данных. Но! Советую лезть туда не раньше, чем окажешься на третьем или четвертом этапе.
Удачи! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
совсем незнакомый
Зарегистрирован: 24.12.2003 Сообщения: 183 Откуда: Israel
|
Добавлено: Пт Фев 13 2004 15:48 Заголовок сообщения: |
|
|
вопрос создания prosten'koj базы данных ... возникал у меня. нам нужно было всё создавать в памяти, поэтому по-настоящему мы не возились с прогулками по файлам,
и т.д. но повозившись "немного", мы поняли сколько
работы уходит на разработку приличной СУБД.
советую лучше всего определиться с вопросами реализации:
1) что мне нужно от базы данных [величина, скорость реагирования, кол-во одновремменных запросов, кол-во информации, кол-во памяти, границы, безопасность и т.д.]
2) потому как вопрос изобретения велосипеда у вас не стоит, посоветую поосторожней отнестись к языку или АПИ манипуляций вашей Б.Д.: в противном случае вы большее время будете разрабатывать интерфейс.
Удачи. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Chainiku
Зарегистрирован: 12.02.2004 Сообщения: 3
|
Добавлено: Пт Фев 13 2004 17:44 Заголовок сообщения: |
|
|
Большое спасибо. Структура-то есть.
Хочу понять как базы данных устроены программно – то есть, как данные прописываются в саму базу? Каким образом осуществляется доступ к данным одновременно?
Мои рассуждения – поправьте, если можете. Этого я нигде не читал, это мое представление.
1. Имеется программа, код которой описывает некоторые правила формирования файла на жестком диске.
2. После ввода данных в столбик 1 строку 1, информация будет хранится в некоторой области оперативной памяти, определенной программным компонентом, например Delphi – StringGrid.
3. Затем значение информации будет скопировано из памяти в файл на жестком диске.
4. Или пункт 3 не будет выполняться и значения всех ячеек будут записываться из памяти в файл по завершении работы программы. (С моей точки зрения это неправильный путь, так как данные при сбое питания компьютера будут уничтожены, поэтому пункт 3 наиболее предпочтительней, так как фиксирует поэтапно значение каждой ячейки и данные могут быть доступны другим пользователям-клиентам).
5. Как правильно устроить файл с информацией?
Предполагаю, что его устройство таково – шапка базы данных, то есть информация о количестве столбиков и строк, количество отведенных байт для ячейки столбика 1 строки 1, столбика 2 строки 1 ... и т.д
Затем некое сочетание байтов или псевдосимвол, дающий разделение между шапкой базы данных и самими данными. Когда файл загружается программой, позицирование на этом псевдосимволе означает начало данных. Таким образом определив в шапке базы данных байтную длину данных, можно перемещаться по данным в файле смещаясь на определенное количество байт вперед или назад. В шапке базы данных имеется информация о количестве столбиков и строк. Значит структура файла будет похоже на следующее:
Шапка базы данных
------------------------
Данные(1 столбик)
Строка 1, Строка 2, Строка 3 ... Строка N
------------------------
Данные(2 столбик)
Строка 1, Строка 2, Строка 3 ... Строка N
------------------------
Данные(N столбик)
Строка 1, Строка 2, Строка 3 ... Строка N
Если вышеописанная структура правильна, дайте знать, пожалуйста.
Как исказить файл базы данных, чтоб при просмотре в обыкновенном режиме F3, не было видно текста и вообще данных? Понимаю, что ужасно тупой вопрос, но поверьте если база данных просто громадная, то проводить шифрование файла целиком - это коварство. Так как для доступа к данным понадобится сначала подвергнуть файл к дешифровке, а значит время доступа к базе увеличится. Значит надо шифровать данные на этапе записи ячейки в файл? Сжимаемы ли базы данных – имеется ввиду простая архивация в момент работы с ней или это тоже влияет на время доступа?
Всё это меня интересует как простого "чайника".
Друзья поделитесь... знаниями. Спасибо. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
wildwind
Зарегистрирован: 03.02.2004 Сообщения: 268 Откуда: Москва
|
Добавлено: Пт Фев 13 2004 20:51 Заголовок сообщения: |
|
|
Ну-у-у, погнали! наши городских... А где же первый этап? Эх, лень-матушка, вперед нас родилась. Все-таки, подумай вначале вот над чем:
* Твоя база будет персональная или многопользовательская? Если персональная, то не надо думать про одновременный доступ. Если многопользовательская, то не надо думать про StringGrid'ы. То есть надо, но в последнюю очередь. * Зачем твоей базе шифрование? Она что будет лежать в расшаренной папке? или на FTP сервере? * Зачем твоей базе сжатие? С ней будут работать на дискете? Постарайся ответить аргументированно на эти вопросы. Потом поедешь дальше.
______________________________
По твоим рассуждениям, раз уж вывалил. В целом мыслишь верно. Насчет стуктуры файла - представь такую ситуацию. В нем уже есть много строк и хотят добавить новую. В сколько мест в файле нужно будет вставлять данные? То же и с удалением. А что если поменять местами строки и столбцы, типа:
Шапка
--------------
Срока 1
столбец 1, столбец 2, ..., столбец N,
...
Срока M
столбец 1, столбец 2, ..., столбец N,
-----
Получили нечто похожее на структуру DBF. Про нее я уже говорил - копировать не стоит.
А почему собственно база данных должна иметь табличную структуру? Почему например не дерево? Посмотри на реестр Windows - тоже база. Древовидная однако. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Гость
|
Добавлено: Сб Фев 14 2004 20:53 Заголовок сообщения: |
|
|
если очень хочется понять (т.е. увидеть):
пойди на:
www.mysql.com
www.postgres.com
и там увидишь ответы на эти вопросы.
а в общем проблема "критического участка кода"
решается на системном уровне, т.е. есть инструменты для защиты к.у.к.:
семафоры, мутексы и прочие твари.
в виндах... не очень разобрался - но есть даже что-то типа
CriticalSection()
и в MFC есть класс CMutex
удачи. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|