Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696

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

10.10.2008, 15:05. Показов 4843. Ответов 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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
87413 / 52989 / 249
Регистрация: 10.04.2006
Сообщений: 13,711
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru