|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Имеется некий прибор, который проводит физические замеры подсовываемых ему проб. В процессе единичного измерения прибор изменяет температуру воздуха в рабочей камере с некоторым шагом и выплевывает текстовый файл с 9-ю столбцами: Т, S1 ... S8, где Т - температура, а S1 ... S8 - собсбвенно физические параметры. Файл содержит также информацию о текущих настройках прибора. Измерение одной и той же пробы проводится многократно, т.е. имеем много таких файлов в которых число строк различно, так как начальная и конечная температура измерения различны. Т.е. имеем например: file1 Т 20 ... 400 file2 Т 30 ... 420 Требуется хранить всю эту беду. Запрашиваться могут результаты по какой-нибудь пробе в заданном диапазоне температур. Неприятной особенностью является возможное требование получать данные в хронологическом порядке, да еще и пожелание отсеивать некоторые из них при выполнении/невыполнении некоторых условий сравнения с данными из предыдущего/последующего измерений. Я сделал так (опуская некоторые детали): CREATE TABLE List_of_files ( ID_File integer NOT NULL PRIMARY KEY IDENTITY (1,1), File_Name varchar(50) NOT NULL, Datum datetime NOT NULL, UNIQUE (File_Name, Datum) ) CREATE TABLE Descriptions ( ID_Description integer NOT NULL PRIMARY KEY IDENTITY (1,1), ... %здесь идут еще 8 столбцов идентифицирующие пробу и настройки прибора ) CREATE TABLE EDaten ( ID_Dat integer NOT NULL PRIMARY KEY IDENTITY (1,1), ID_Description integer NOT NULL FOREIGN KEY REFERENCES Descriptions ID_Description), T decimal(6,2) NOT NULL, S1 decimal(12,5), ... S8 decimal(12,5), ID_File integer NOT NULL FOREIGN KEY REFERENCES List_of_files (ID_File) ) Жить можно, хотя некоторые запросы получаются довольно сложными и, соответственно, обещают быть небыстрыми. Может кто покритиковать, что-то посоветовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2003, 17:04 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Видимо, это есть оптимальный способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2003, 14:23 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Yossarian, ну что ж, спасибо на добром слове. Не пойму только или я слишком неясно изложил, или в самом деле все настолько "оптимально", что сказать нечего :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2003, 11:48 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
sti, Вопрос достаточно длинный, тема не совсем стандартная. Я вот, к примеру, несколько дней настраиваюсь, прежде чем как следует понять, о чем идет речь. Хоть и чувствую, что вопрос интересный. Плюс летом народу меньше примерно вдвое-втрое... (все ИМХО) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2003, 14:57 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Я тоже это долго обдумывал. За постановку задачи я бы поставил пять баллов. вопросы. Прежде всего, меня удивляет наличие поле - Имя файла. Вполне достаточно "Эксперимент №". Скорее всего, в этом качестве может выступать время создания файла. Или IDENTITY. Тогда табла получается такая ExpId (datetime) ? T s1 ... s8 И вроде никакой трудности с запросами. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2003, 20:50 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Меня тоже имя файла смутило, но мало ли зачем... Может, надо. В конце концов - это хороший уникальный натуральный ключ. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2003, 13:45 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Cat2, спасибо за добрые слова. Оставить только время плохо хотя бы потому, что если появляется второй прибор, то время уже может быть неуникальным. Поэтому, пообсуждав, мы приняли, что признаком уникальности данных (чтобы их второй раз кто-нибудь по ошибке в базу не запихал) будет служить комбинация имя файла+время его создания. На самом деле тут есть больное место, которое тоже хотелось бы обсудить. Напишу потом с работы. Все таки в выходные положено отдыхать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2003, 14:15 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Итак, "больное" место: Файлы, создаваемые прибором, содержат информацию о настройках прибора. Информация же о том, что собственно исследовалось в тот или иной момент времени сожержится первоначально только на бумажке у того, кто это исследование проводит. При занесении данных в базу вводится вручную информация о проведенном исследовании (четыре поля в таблице Descriptions) и выбираются соответствующие файлы с данными. Проблема в том как этот процесс организовать, чтобы исключить ошибки. Сейчас исследователь перед записью в базу сортирует файлы по папкам и пишет на бумажке что и где у него лежит. Введением UNIQUE (File_Name, Datum) я подстраховался от возможности дважды внести в базу данные из одного и того же файла. Это в принципе не исключает других возможных ошибок на этапе внесения данных в базу. Собственно проблема, конечно, не относится напрямую к проектированию БД, но буду рад если услышу какие-то мысли по этому поводу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2003, 13:36 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Да, забыл добавить. Это является еще одной причиной, почему я храню Имя файла. Если обнаруживается, что какие данные выглядят весьма сомнительно, то я могу всегда сказать: "А посмотри, уважаемый, не наколбасил ли ты чего в таких то файлах." Что существенно проще, чем искать эти файлы по всей сети имея только время их создания. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2003, 15:02 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Меня тоже это смутило. Зачем в таблице description хранить данные и о настройках прибора и о пробе, при том что одна и та же проба может испытываться при разных настройках в разное время разными людьми? Я бы дополнил структуру следующими таблицам 1. Material (испытываемый материал):ID (PK), и т.п. 2. Probe_Date (параметры пробы):ID (PK),Material_ID(FK), доп аттрибуты, относящиеся к пробе 3. Face (Экспериментаторы): ID, и т. п. Из Desription я бы убрал все про пробу, и оставил про прибор А из Edaten - внешний ключ Desription_ID 4.Description (ID, поля параметров прибора) 5. Experiment (данные об эксперименте): ID, Date (дата),time (время), Face_ID (FK),Edaten_ID(FK), ProbeDAte_ID(fk), Description_ID (FK) При таком подходе "основной таблицей" будет таблица "Experiment", и статистику собирать, по-моему, будет проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2003, 18:51 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Меня смутило "больное место", а не то, что было в предыдущем абзаце. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2003, 18:56 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
2wara: Я вот читал-читал топик, но НИ ЕДИНОГО СЛОВА про : Material (испытываемый материал), Face (Экспериментаторы) вообще не нашел. Откуда Вы их взяли ? Или у Вас есть какие-то данные о задаче, полученные помимо топика, или это Ваше собственное изобретение. Я бы не стал _нормализовывать_ базу на основании домыслов о предметной области. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2003, 09:41 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Зато это видно по примечанию : "Файлы, создаваемые прибором, содержат информацию о настройках прибора. Информация же о том, что собственно исследовалось в тот или иной момент времени сожержится первоначально только на бумажке у того, кто это исследование проводит. При занесении данных в базу вводится вручную информация о проведенном исследовании (четыре поля в таблице Descriptions) и выбираются соответствующие файлы с данными." "Проблема в том как этот процесс организовать, чтобы исключить ошибки. Сейчас исследователь перед записью в базу сортирует файлы по папкам и пишет на бумажке что и где у него лежит." Лично я из постановки задачи следует: Задача базы данных - хранить результаты экспериментов с некими образцами, причем один и тот же образец может неоднократно испытываться разными экспериментаторами при разных условиях. 1. Часть входных данных для БД формируется автоматически (есть готовые файлы с измерениями и настройками прибора) 2. Часть данных вводится вручную либо на основе к-л журналов, либо прямо в БД. Причем как это делается, неясно. Откуда берутся, к примеру "8 столбцов идентифицирующие пробу" в таблице Description Базы sti. А берутся они из каких-либо бумажек и вносятся вручную. Поэтому постановку задачи надо признать несколько узкой. Основная проблема у автора вопроса не только в том "как придумать структуру", а в том "как правильно организовать регистрацию фактов эксперимента". А для этого данных недостаточно, вот я немного и пофантазировал про "материал", например. Но вот то, что данные о том, кто проводил эксперимент, когда и каковы параметры исследуемого образца должны быть в БД - очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2003, 10:53 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Так, отвечаю по частям. Первое: CREATE TABLE Descriptions ( ID_Description integer NOT NULL PRIMARY KEY IDENTITY (1,1), ID_ProbenName integer NOT NULL FOREIGN KEY REFERENCES ProbenNamen (ID_ProbenName), ID_Behandlung integer NOT NULL FOREIGN KEY REFERENCES Behandlungen (ID_Behandlung), ID_Sensor1 tinyint NOT NULL FOREIGN KEY REFERENCES Sensors (ID_Sensor), ID_Sensor2 tinyint NOT NULL FOREIGN KEY REFERENCES Sensors (ID_Sensor), ID_Sensor3 tinyint NOT NULL FOREIGN KEY REFERENCES Sensors (ID_Sensor), Board int NOT NULL FOREIGN KEY REFERENCES Boards (Board), C2H4 int, Klasse varchar(14), Benutzer varchar(14) NOT NULL ) Здесь ID_Sensor1, ID_Sensor2, ID_Sensor3 и Board приходят из файла с данными. Т.е. каждый файл содержит эту информацию. Ясно, что для одного и того же эксперимента эта информация повторяется. Это тоже проверяется при занесении в базу. Benutzer - пользователь. ProbenNamen - названия проб (материал в терминах wara) Behandlungen - тесктовые описания. Что-то вроде: "помолившись и помыв руки засунул я в прибор свежесгнившее яблоко". Т.е. если исследователь считает, что от того, помолился он или нет, зависят результаты, то он должен в последствии суметь различать эксперименты. C2H4 - точное измерение одного важного параметра другим, тестовым, прибором (может быть не задан). Не путать с S1...S8. Это другая физическая величина. Klasse - один из четырех возможных классов визуальной оценки пробы (может быть не задан) Далее - одна и та же проба не может быть исследована при разных настройках прибора разными людьми. Это будет уже другая проба. Второе: Как вносятся данные: 1. Пользователь выбирает файлы, данные из которых он собирается внести в базу. 2. Выбирает из уже имеющихся или вводит новые ProbenNamen, Behandlungen. 3. Вводит если заданы C2H4 и Klasse Далее ID_Sensor1, ID_Sensor2, ID_Sensor3 и Board читаются из файлов, проверяются на совпадение и данные пишутся в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2003, 12:20 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
> Основная проблема у автора вопроса не только в том "как придумать структуру", а в том "как правильно организовать регистрацию фактов эксперимента". Это верно. > Я бы дополнил структуру следующими таблицам ... Ну дак они есть. То есть база нормализована по максимуму. А вот про разбиение таблицы Descriptions на две я пока не въехал, хорошо это мне или нет. Подумать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2003, 12:30 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Yossarian Тут у нас прямо "итеративный процесс постановки задачи с наращиванием возможностей" :-), не находите? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2003, 12:17 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
> Тут у нас прямо "итеративный процесс постановки задачи с наращиванием возможностей" :-) Есть такое :-) Просто я хотел сначала посоветоваться только по одному поводу и убрал все "лишнее" для упрощения. Но аппетит приходит во время еды. Да еще и народ такой дружелюбный, грех не пообщаться :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2003, 12:49 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
sti, Вы почаще сюда заходите, увидите, какие тут "дружелюбные" экземпляры встречаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2003, 13:06 |
|
Построение БД для хранения матриц с переменным числом строк
|
|||
---|---|---|---|
#18+
Ну "кровавые битвы на подушках", наверное, на всех форумах случаются. По поводу разбиения таблицы Descriptions. Не вижу никакого смысла. Т.е. у меня сейчас могут быть два или более эксперимента с полностью идентичными данными. Различу я их по ID_Description. И это хорошо. Захочу - возьму данные для анализа вместе, захочу - раздельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2003, 14:20 |
|
|
start [/forum/topic.php?fid=32&msg=32191914&tid=1546925]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 182ms |
0 / 0 |