Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.06.2019, 01:12
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Как правильно создать таблицы?

Здравствуйте!Подскажите как правильно создать таблицы для хранения данных? У меня есть имя варианта расчета, исходные данные ,расчет и результат расчета. Я хотел сохранить в таблицах имя, исходные данные и результат расчета. Имя это уникальное текстовое или цифровое значение. Исходные данные это набор числовых данных (статический) . А выходные данные это данные в виде таблицы (статической) 6x10. Т. е все исходные и результирующие привязаны к имени варианта расчета. Т. е каждому варианту расчета соответствует свой набор исходных и результирующих данных.
Я сделал в первом приближении,но не понятно как правильно.
Таблицы paradox.
Ответить с цитированием
  #2  
Старый 19.06.2019, 19:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Ну, я бы сказал, что это вообще плохая идея - сохранять подобные данные в БД. По умолчанию, порядо строк в возвращаемом результате при запросе данных из БД не регламентирован. Т.е. придется делать дополнительные телодвижения что бы гарантированно получить строки в нужном порядке. Да и кол-во колонок в таблице не динамическое.
Отсюда получается, что один вариант надо хранить в одной строке, в одной ячейке в сериализованном виде. Ну а т.к. у тебя все соотношения 1-к-1, то достаточно одной таблицы для этого:
Код:
create table dataTable
(
  ID AUTOINC PRIMARY KEY,
  NAME VARCHAR(100),
  SRC_DATA BLOB,
  RES_DATA BLOB
);

PS. А вообще, коли все-равно надо делать сериализацию/десериализацию, то необходимости тянуть за собой БД я особой не вижу. Проще написать свой маленький классик и хранить все в файле/файлах - хочешь, можешь сделать все варианты в одном файле, хочешь - каждый вариант в своем файле.
Ответить с цитированием
  #3  
Старый 20.06.2019, 18:23
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Я создал табл 1 c проектами с полями id и nameproj , таблицу 2 с исходными данными с полями id A,D,C и т.д (поля с данными которые попадают из edit). Если первая связана со второй, т. е при занесении записи (имени проекта) в первую таблицу автоматически через id заполняются поля таблицы 2. Не ясно как как связать таблицу с результатами с таблицей 1, т. е что бы было понятно какой результат расчета какому проекту принадлежит.

Последний раз редактировалось Maks19, 20.06.2019 в 18:28.
Ответить с цитированием
  #4  
Старый 20.06.2019, 20:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Надо добавить еще одно поле:
Код:
PROJECT_ID INTEGER REFERENCE Таблица1.ID,
Ответить с цитированием
  #5  
Старый 20.06.2019, 22:26
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Добавить поле в таблицу 1 и связать с id таблицы 3? Т. е табл 1 главная,а 3 подчиненная?
Т. к результат массив из 6 столбцов и 10 строк то как представить их в таблице 3? В конечном счете мне нужно сохранить в таблице массив значений A[i], В[i],C[i], и т. д где i=0,..6
Ответить с цитированием
  #6  
Старый 21.06.2019, 00:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Прочти же, юный падаван, мой первый комментарий!
Особенно замечание по поводу порядка строк при выборке данных из таблицы.

А так, да. Таблица 1 является главной. Соответвенно многие строки из подчиненной таблицы могут ссылаться на одну строку главной.
Ответить с цитированием
  #7  
Старый 21.06.2019, 12:37
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, я бы сказал, что это вообще плохая идея - сохранять подобные данные в БД. По умолчанию, порядо строк в возвращаемом результате при запросе данных из БД не регламентирован. Т.е. придется делать дополнительные телодвижения что бы гарантированно получить строки в нужном порядке. Да и кол-во колонок в таблице не динамическое.
Отсюда получается, что один вариант надо хранить в одной строке, в одной ячейке в сериализованном виде. Ну а т.к. у тебя все соотношения 1-к-1, то достаточно одной таблицы для этого:
Код:
create table dataTable
(
  ID AUTOINC PRIMARY KEY,
  NAME VARCHAR(100),
  SRC_DATA BLOB,
  RES_DATA BLOB
);

PS. А вообще, коли все-равно надо делать сериализацию/десериализацию, то необходимости тянуть за собой БД я особой не вижу. Проще написать свой маленький классик и хранить все в файле/файлах - хочешь, можешь сделать все варианты в одном файле, хочешь - каждый вариант в своем файле.
Можно подробнее зачем сериализация. Порядок строк не регламентирован ,что это значит ?
Ответить с цитированием
  #8  
Старый 21.06.2019, 23:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

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

Сериализация - это превращение объекта в одно значение с возможностью последующей десериализации, т.е. восстановление исходного объекта. В твоем случае объект - это массив 6х10 (для выходных данных). В этом случае это значение (очень длинное, к слову) можно сохранить в одно поле одной записи.
Ответить с цитированием
  #9  
Старый 22.06.2019, 10:10
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А нельзя сделать, чтобы в записях хранилось через интервал 6 строк результат вычислений? Т. е одному проекту соответствует 6 строк, второму 6 строк и т. д?
А какие дополнительные "телодвижения" ?
Ответить с цитированием
  #10  
Старый 22.06.2019, 20:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

все можно сделать. вопрос только в том, нужно ли.
Я вообще не понимаю зачем тебе БД в этом случае...
Ответить с цитированием
  #11  
Старый 22.06.2019, 22:15
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
все можно сделать. вопрос только в том, нужно ли.
Я вообще не понимаю зачем тебе БД в этом случае...
То что можно хранить в файлах я понял.И если все -таки через базу, то как реализовать хранение данных через через каждые 6 записей с привязкой к записям из табл 1?
И еще вариант, под каждый проект динамически создавать таблицу?
Ответить с цитированием
  #12  
Старый 23.06.2019, 06:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Тебе нужно Autoincrement поле, тогда можно будет сортировать по этому полю при выборке. Ну и все эти записи должны ссылаться на одну запись в главной таблице.
Ответить с цитированием
  #13  
Старый 24.06.2019, 12:36
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А каким образом сортировать? Не понятно.
Ответить с цитированием
  #14  
Старый 24.06.2019, 19:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,472
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

В запросе добавляешь ORDER BY:
Код:
SELECT * FROM SrcTable
WHERE PROJECT_ID = :PID
ORDER BY ID ASC
Ответить с цитированием
  #15  
Старый 25.06.2019, 23:13
Maks19 Maks19 вне форума
Новичок
 
Регистрация: 19.06.2019
Сообщения: 80
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А сам запрос он использованием Query делать? У меня 3 набора Table 1,Table 2, Table 3 для трех таблиц было. Table 3 не нужен?
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter