Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];

Вниз

организация работы с таблицами   Найти похожие ветки 

 
_qwerty_   (2011-11-30 18:36) [0]

Есть 2 таблицы:

Таблица: Groups

поля таблицы: Id - идентификатор товарной группы, Name - название группы;

данные таблицы:

16191 Шины
16192 Диски
16193 Колпаки

-------------------------------------------------------------------------

Таблица: Group_[Id], где Id - идентификатор товарной группы из таблицы Groups (например, Group_16191)

поля таблицы: GoodId - идентификатор товара, принадлежащего данной товарной группе, [поля, который пользователь создает самостоятельно, например: field1, field2, field3]

данные таблицы:

1 "Значение поля 1" "Значение поля 2" "Значение поля 3"
2 "Значение поля 1" "Значение поля 2" "Значение поля 3"
3 "Значение поля 1" "Значение поля 2" "Значение поля 3"

логика: когда в таблицу groups добавляется новая запись (товарная группа), автоматически создается таблица в имени которой присутствует идентификатор добавленной записи (group_16191, group_16192, group_16193, ...). дальше для этой таблицы пользователь в приложении может создать несколько полей.

задача: в ком-сервер добавить метод, который бы для указанной товарной группы, возвращал бы значение заданного поля для указанного товара;

примерный алгоритм:


function GetFieldValue(AGroupId, AGoodId: Integer; const AFieldName: string): Variant;
begin
 // Проверяю, чтобы в таблице Groups существовала запись с Id = AGroupId
 Assert(FGroupsTable.FindKey([GroupId]));

 // Создаю и открываю таблицу
 GroupXTable := TDBISAMTable.Create;
 GroupXTable.DatabaseName := FDatabaseName;
 GroupXTable.SessionName := FSessionName;
 GroupXTable.TableName := Format("group_%d", [AGroupId]);
 GroupXTable.Open;

 // Проверяю, чтобы в ней существовал товар с GoodId = AGoodId.
 Assert(GroupXTable.FindKey[AGoodId]));

 // возвращаю результат
 Result := GroupXTable.FieldByName(AFieldName).Value;
end;


нужно написать быстрый алгоритм, как лучше всего организовать работу с таблицами? будет ли правильно не создавать каждый раз при вызове GetFieldValue таблицу GroupXTable, а создавать единожды и сохранять открытой в списке (TList), при каждом вызове GetFieldValue проверять, если таблица с таким имененем есть в списке обращаться к ней, иначе создавать и добавлять в список.


 
Ega23 ©   (2011-11-30 19:57) [1]

Будет правильным пересмотреть структуру базы.


 
Сергей М. ©   (2011-11-30 20:17) [2]


> поля, который пользователь создает самостоятельно


Программиста, допустившего такое - сразу на костер.


 
KilkennyCat ©   (2011-11-30 20:31) [3]


>  Сергей М. ©   (30.11.11 20:17) [2]

За что? это же офигительно! Тут может стока каки получится, что вздрогнут все и вся.


> _qwerty_

в базу только записи добавляются. эти поля - свойства товара, что-ли?
ну дык сделай таблицу свойств, и добавляй туда записи.


 
_Юрий   (2011-11-30 21:08) [4]


> будет ли правильно не создавать каждый раз при вызове GetFieldValue
> таблицу GroupXTable, а создавать единожды и сохранять открытой
> в списке (TList), при каждом вызове GetFieldValue проверять,
>  если таблица с таким имененем есть в списке обращаться
> к ней, иначе создавать и добавлять в список.


Почему бы и нет. Только размер списка следует ограничить, чтобы он не рос бесконечно. Например, все время держать его сортированным по времени последнего обращения, при добавлении новых элементов при переходе за какое то количество удалять тот, который дольше всех не использовался.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1322663788
_qwerty_
2011-11-30 18:36
2012.03.11
организация работы с таблицами


2-1322481594
jacksotnik
2011-11-28 15:59
2012.03.11
DBCombobox


15-1321134248
Кто б сомневался
2011-11-13 01:44
2012.03.11
Ктонить из форумчан хочет поиграть в Left4Dead2 или другие игры?


1-1288777384
ArtemKolesnikov
2010-11-03 12:43
2012.03.11
OLE Word. Как вставить формулу со знаком корня?


2-1322563453
Vyacheslav
2011-11-29 14:44
2012.03.11
Теория: Как эта функция отдаёт константы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский