Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/24: Рейтинг темы: голосов - 24, средняя оценка - 4.96
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696

Какой вариант для хранения данных выбрать?

10.10.2008, 15:05. Показов 5001. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть прога. Работает с БД (не суть важно для вопроса с какой). Программа принимает различные данные от пользователя. Номер контракта, дом телефон и т. д.. Все эти данные потом должна заноситься в БД.
Планирую в таблице примерно такую структуру:

| №_контракта | дом_тел | . . . | . . .

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

Пока мне в голову приходит только: сделать одно поле для выполняемых работ. Задать ему определенный формат. Например, сначала текст "вид работы", потом какой нибудь специальный знак, а за ним цена работы. Тогда нужно читать строку, парсить... Бррр.

Дублировать записи не пойдет. Создавать для каждой выполненной работы отдельное поле тоже. Т. к., будет куча пустых полей. Да еще цена...

Что можно еще придумать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2008, 15:05
Ответы с готовыми решениями:

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

Какой оптимальный вариант хранения записей с одинаковыми значениями?
Здравствуйте! Хотелось бы узнать ваше мнение как лучше хранить записи большинство которых имеют одинаковые повторяющиеся значения, но...

Какой вариант хранения данных о пользователях лучше?
Вариант 1. Есть папка Users. В ней находятся папки пользователей , в каждой папке есть текстовый файл содержащий пароль пользователя . И...

32
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 15:11
А таблицу с видами и стоимостью работ сделать и привязать ее к основной по внешнему ключу - не вариант?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
10.10.2008, 15:15  [ТС]
дело в том, что виды работ не фиксированы. Стоимость тоже вводится самим пользователем.

Например. Есть контракт номер 0000, ему выполнили работу 1, работу 2 и 3. стоимость 1 - 100, 2 - 200, 3 - 300.

И есть контракт 1111, ему выполнили работу 1 стоимостью уже 350, а не 100, как в предыдущем, работу 5 стоимостью 400.

Имена работ: 1, 2, 3, 5 вводятся пользователем и могут быть любыми.
Что мы тогда должны хранить в еще одной таблице?
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 15:15
Структура базы должна быть такой.
Таблицы: Пользователи, Контракты, Работы
Таблица Контракты ссылается на таблицы Пользователи (бизнес-правило о контрактах пользователя) и таблицу Работы (бизнес-правило о работах по контракту). В случае, если по контракту может осуществляться несколько работ, то вводится таблица связей, содержащая записи со ссылками на контракт и выполняемые по нему работы с их стоимостью. Если контракт может выполняться несколькими пользователями, то тоже вводится соответствующая таблица связей.
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
10.10.2008, 15:17
Думаю что надо хранить эти данные ввиде связанных таблиц
например в одной таблице хранятся все данные о работнике плюс его ID
( primery key) и для каждого рабочего создаем дочернюю таблицу, в которой
будет также храниться ID рабочего и данные о выполняемых работах
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 15:18
Цитата Сообщение от Sergei Посмотреть сообщение
и для каждого рабочего создаем дочернюю таблицу, в которой
будет также храниться ID рабочего и данные о выполняемых работах
Не многовато таблиц? Учите теорию баз данных.
0
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 15:24
Цитата Сообщение от Vourhey Посмотреть сообщение
дело в том, что виды работ не фиксированы. Стоимость тоже вводится самим пользователем.

Например. Есть контракт номер 0000, ему выполнили работу 1, работу 2 и 3. стоимость 1 - 100, 2 - 200, 3 - 300.

И есть контракт 1111, ему выполнили работу 1 стоимостью уже 350, а не 100, как в предыдущем, работу 5 стоимостью 400.

Имена работ: 1, 2, 3, 5 вводятся пользователем и могут быть любыми.
Что мы тогда должны хранить в еще одной таблице?
Храним имя работы, стоимость; связь с основой по № контракта( это в грубом виде)
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 15:26
Цитата Сообщение от Angry_Bobo Посмотреть сообщение
Храним имя работы, стоимость;
А если стоимость работы будет зависеть от контракта и исполнителя?
Читайте пост 4.
0
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 15:31
Цитата Сообщение от mik-a-el Посмотреть сообщение
А если стоимость работы будет зависеть от контракта и исполнителя?
Читайте пост 4.
имеется в виду стоимость введенная пользователем.
Читайте посты 1,3...
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 15:32
Цитата Сообщение от Angry_Bobo Посмотреть сообщение
имеется в виду стоимость введенная пользователем.
Так она тогда и зависит от пользователя, контракта и работы))
Таким образом, структура базы будет следующей.

Таблицы: Пользователи, Контракты, Работы и таблица связей Пользователь - Контракт - Работа - Стоимость работы (числовое поле).
0
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 15:40
Анализируязагвоздку Vourhey, прихожу к выводу, что достаточно так:

Таб1 (№ контракта (PK), дом. тел,.....,...)
Таб2 (№ контракта (FK), работа, сумма )

ни больше ни меньше...
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 15:46
Цитата Сообщение от Angry_Bobo Посмотреть сообщение
Таб1 (№ контракта (PK), дом. тел,.....,...)
Что за дом, тел? Если исполнителя, то получаем дублирование данных в базе по пользователям и возможное нарушение их целостности.
Цитата Сообщение от Angry_Bobo Посмотреть сообщение
Таб2 (№ контракта (FK), работа, сумма )
Получаем дублирование данные по работам, соответственно и возможное нарушение целостности данных.

Добавлено через 1 минуту 45 секунд
Емае, люди, не позорьтесь)) Изучите хотя бы основы проектирования баз данных.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
10.10.2008, 15:54  [ТС]
Цитата Сообщение от Angry_Bobo Посмотреть сообщение
Храним имя работы, стоимость; связь с основой по № контракта( это в грубом виде)
То есть,
| job_name | cost |
Где будет номер контракта? Хотя, сделать тогда примерно так вторую таблицу:
| contract_num | job_name | cost |
Соответственно, в первой у нас тоже будут номера контрактов, но записи не будут повторяться. Вобщем, что-то в таком роде тогда:

Инфа о заказчике:
| contract_num | phone_num | surname |

Инфа о работах:
| contract_num | job | cost |

норм?
Я системщик. Понимание БД у мя несколько своеобразное )))

Добавлено через 1 минуту 53 секунды
Блин, я опоздал.
Angry_Bobo, мнения сошлись.

Добавлено через 32 секунды
mik-a-el, я не могу придумать, как здесь без дублирования номеров контрактов. ИМХО, никак.
0
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 15:59
Цитата Сообщение от Vourhey Посмотреть сообщение
Инфа о заказчике:
| contract_num | phone_num | surname |

Инфа о работах:
| contract_num | job | cost |

норм?
Почти... только лучше сделать так:

Инфа о заказчике:
act_id| contract_num | phone_num | surname |

Инфа о работах:
act_id| job | cost |

где act_id первичный ключ в инфе о заказчиках и внешний в инфе о работах... соотв. связь м/д таблицами по полю act_id
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 16:07
Angry_Bobo, ответьте на мои вопросы по структуре базы, а то я уже устал смеяться, читая ваши посты

Добавлено через 2 минуты 50 секунд
Цитата Сообщение от Vourhey Посмотреть сообщение
mik-a-el, я не могу придумать, как здесь без дублирования номеров контрактов. ИМХО, никак.
Да что тут непонятного?
Есть 3 таблицы: данные о пользователях (ИД, номер телефона, адрес и т.п.), данные о контрактах (ИД, суть контракта) и данные о работах (ИД название работы, суть работы). Есть таблица, задающая связи между пользователем (внешний ключ на ИД пользователя), контрактом (внешний ключ на ИД контракта) и работой (внешний ключ на ИД работы) и задающая стоимость этой связки. Эта структура покрывает весь ваш функционал.
Блин, элементарная задача, а ошибок понаделано...

Добавлено через 2 минуты 50 секунд
Angry_Bobo, хотелось бы выслушать доводы против этой структуры и за вашу
0
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 16:14
Цитата Сообщение от mik-a-el Посмотреть сообщение
Angry_Bobo, ответьте на мои вопросы по структуре базы, а то я уже устал смеяться, читая ваши посты
mik-a-el,речь в топикстарте шла о хранении данных о выполняемых работах, а не о нормализации всей предметной области., может это и не нужно в данной ситуации, а вы в человека путаете...
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 16:16
Но это не значит, что нужно допускать подобные просчеты при проектировании базы. Или вы всегда так относитесь к проектированию баз?
Я таки жду ответы на свои вопросы.
0
 Аватар для Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
10.10.2008, 16:42
Я вообще думал, что по постановке,нужно запихать все в одну таблицу и поэтому аккуратно предложил такой вариант. А с точки зрения нормализации, mik-a-el , вы абсолютно правы и с такой моделью я вполне согласен...
0
Администратор
 Аватар для mik-a-el
87855 / 53176 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
10.10.2008, 16:44
Да, мы наверно по-разному поняли суть задачи. Я понял то, что необходимо создать базу, где необходимо хранить данные о пользователях, их контрактах, работах и стоимости работ. Собственно и структура базы была под именно такую задачу.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
10.10.2008, 17:06  [ТС]
Да дело в том, что о заказчиках речи вообще нет. Здесь главное - это номер контракта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2008, 17:06
Помогаю со студенческими работами здесь

Какой лучше выбрать формат для хранения векторов (массив float) в БД
Имеется массив float размерность его 128 значений (это для одного изображения). Для хранения массивов (векторов) используется SQL Server...

Какую базу данных выбрать для локального хранения
Здравствуйте. Хочу написать свое первое приложение для андроид подскажите ответ на пару вопросов. Приложение будет проверять машины на...

Какой вариант выбрать ?
Avast free antivirus + Comodo Firewall или сразу установить Comodo Internet Security?

Как выбрать внешний жесткий диск для хранения данных?
Что посоветуете, уважаемые гуру?

Необходимо выбрать структуру (список, К-Ч дерево и т.д) для хранения данных
Решил описать задачку здесь, может кому тоже интересно будет, такие не каждый день на выдумывание хитрых алгоритмов дают, это не скучная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru