|
Страници по тази тема: 1 | 2 | (покажи всички)
Тема
|
Зов за идея :с
|
|
Автор | Sure (Нерегистриран) |
Публикувано | 15.08.05 21:46 |
|
Опитвам се значи да пиша нещо като проста машина за 'плоски' бази данни , но се чудя как точно да имплементирам нещата така че да имам възможност за динамично създаване и редактиране на таблици, имена на полета , тип данни и т.н.
Засега ползвам следната схема :
//Имам структура представляваща таблицата
struct _record
{
char first_name[64];
unsigned age;
unsigned char blob_picture[256*256];
.....
};
// ползвам STL за манипулациите, нещата се пишат и четат от двоичен файл.
std::list<_record*> DB;
std::list<_record*> DBFiltered;
std::list<_record*>::iterator DBIter;
.....
//хедър в началото на файла
struct _header
{
char file_name [512]; //the database file name and path
char table_name[32]; //the database/table name
char field_names[1024]; //names are separated with ','
unsigned int field_count;
unsigned int record_count;
unsigned long sizeof_record; //размер на записите
......
};
Дотук добре..работи , има и елементарен SQL. Но взех да си задавам въпроса, какъв би бил най-елегантния начин да се избавя от тази статична структура/запис ?
Имам предвид какво би станало ако цялото това нещо отиде в .dll , как юзера
ще може да си проектира собствени таблици с различни типове данни, брой и размер на полетата и съответно размер на записа ? Иначе казано има ли начин
подобно изпълнение да се направи да работи с указани от юзера структури(или например войд указатели каствани до тях...хрмз...) ?
Съвети, идеи,порицания и похвали са добре дошли !
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор | eaz (Нерегистриран) |
Публикувано | 15.08.05 22:16 |
|
Толкова ли не можа да намериш DB библиотека с подходящ лиценз та се налага сам да откриваш топлата вода?
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор |
бaт Koлю (галфон) |
Публикувано | 15.08.05 22:35 |
|
Какво става като имаш примерно:
ALTER TABLE table_name
ADD new_column VARCHAR(20)
Трябва да re-create-неш цялата структура и да пресипеш всичко. Би могло примерно да са 2 файл-а. Единия със структурата на таблицата и поле, което сочи някакъв offset в другия файл, където всъщност са данните.
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор | zzz (Нерегистриран) |
Публикувано | 16.08.05 02:53 |
|
Пишеш бази данни на C++ ?!?? Човеко, ти или си прекален ентусиаст или... както и да е... Успех, все пак!
| |
Тема
|
Re: Зов за идея :с
[re: zzz]
|
|
Автор | tux (Нерегистриран) |
Публикувано | 16.08.05 09:01 |
|
Oracle i MS на basic ли си пишат БД?
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор | tux (Нерегистриран) |
Публикувано | 16.08.05 09:12 |
|
че кой те кара да използваш запис за записите?
опитай се да имплементираш самата БД а не конкретна БД.
може да са списък от колони, примерно.
освен това, не винаги алгоритъм който е добър
за паметта е подходящ и за файлове...
освен това ако не е упражнение по програмиране,
по-добре прочети какво са измислили хората. не
ми се вярва да откриеш нещо революционно :)
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 16.08.05 09:13 |
|
Не може да не знаеш за това -
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор | Veso (Нерегистриран) |
Публикувано | 16.08.05 09:34 |
|
Хммм, странна идея. Но би ли ми казал какъв е мотива да да го правиш ?
- Не искаш да да се обвързваш с конкретна БД и да дистрибутираш
драйверите за нея?
- Колко записа очакваш приблизително да има в БД ?
- Какво време за отговор от заявка очакваш ?
- Колко потребителя ще работят с БД ?
- Колко често ще се добавят/премахват колони в БД ?
- Др. мотиви
Ако трябваше да правя подобно нещо бих разделил всеки файл от БД на 2 части - единия ще съдържа структурата на файла- полета, тип, дължина, а другия ще съдържа самите данни. По този начин избягваш твърдо кодираните структури за всеки файл от БД. Правиш клас, който първо чете структурата на файла и динамично заделя памет за всяко поле.
И според мен, ако не е наложително по добре е данните да не се пазят в двоичен вид, освен, ако не гониш някаква върхова производителност. А и по лесно ще се добавят/премахват колони. Двоичните данни, ако не са много може да съхраняват в др. файл.
Това са предварителни расъждения. Предполагам, че има и по добри идеи.
| |
Тема
|
Re: Зов за идея :с
[re: Sure]
|
|
Автор | GLupo (Нерегистриран) |
Публикувано | 16.08.05 17:10 |
|
Виж тази книга ако искаш:
(адрес на "Teach Yourself Database Programming with Visual C++ 6 in 21 days" .pdf)
http://www.google.com/url?sa=t&ct=res&cd=27&url=http%3A//2p.ru/library/BOOK/
ENGLISH/THEMES/CPP/Teach-Yourself-Database-Programming-with-Visual-C%2B%
2B-in-21-Days-www.itlibitum.ru.pdf&ei=nOYBQ-emFrrc4QGDkrAz
(горните три реда ги направи на един ред обаче! нарочно съм разделил адреса на части за да не развалям изгледа на форума)
В .pdf книгата я има и по българските фриита но е дефектна! Тази съм я търсил 3 часа по нета докато я открия, така че по-добре си я дръпни.
Има и онлайн вариант:
Както и zip архив на HTML формат
| |
|
С тая книга определено ще успее, няма ли някоя за 15 мин та да може за 2 часа да се кандидатства за 2 бомбона заплата.
Adolph Hitler is still alive I slept with her last night.
| |
|
Страници по тази тема: 1 | 2 | (покажи всички)
|
|
|