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

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

10.10.2008, 15:05. Показов 4993. Ответов 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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
87818 / 53139 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru