|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
Как правильно организовать отношение между таблицами(тематика: График работы сотрудника).27.03.2012, 14:18. Показов 6614. Ответов 21
Метки нет (Все метки)
Добрый день!
Народ есть такая проблема, с которой я изменяю жене, работе и жизни в целом. Но ничего не поделаешь, как уперлось в голову так и стоит там. Суть: Есть 2 таблицы 1-я Personal содержащая: |ID | Name | Speciality | WorkScheduleID | в которой, по моим предположениям, сущьность "WorkScheduleID" является ссылкой на ИД в другой моей таблице 2-я WorkSchedule содержащая: | ID | WorkPlan |, где WorkPlan - это datetime Теперь я ума не приложу как мне связать это все так, чтобы у меня было следующее: У каждого сотрудника - есть график работы в месяц, и время его труда. Пример: есть парикмахер Иванова, которая работает 21.03.2012 далее мне надо указать его часы приема с учетом интервала между ними, равное времени выполнения услуги. В кратце запись выглядела бы так Фамилия: Иванова График работы: 21.03.2012 09:00 21.03.2012 09:30 21.03.2012 10:00 27.03.2012 10:30 27.03.2012 11:00 27.03.2012 11:30 Вроде бы все ясно, но вот я не понимаю как сделать взаимоотношения в таблицах БД, чтобы к конкретному парикмахеру соответсвовало несколько дат. Как!? Я что-то совсем уже запутался. Блин, зоть приезжай к кому-нибудь за деньги и урок по БД бери. Ну не допираю я в эти взаимосвязи на деле. В теории все понятно, но стоит начать реализовывать как куча вопросов. Просьба, кому не сложно, киньте советик!
0
|
|
| 27.03.2012, 14:18 | |
|
Ответы с готовыми решениями:
21
Как организовать связь между таблицами
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 27.03.2012, 16:57 | |
|
Добавь в таблицу WorkSchrdule поле id_personal
0
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 27.03.2012, 17:55 [ТС] | |
|
То есть и там и там должна быть ссылка друг на друга. Тоесть отношение многие ко многим?
0
|
|
|
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
|
|
| 27.03.2012, 18:17 | |
|
Нет, из таблицы Сотрудника изыми ссылку на график - получишь 1-n
Хотя лучше всего полностью задачу огласить
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 27.03.2012, 18:17 | |
|
Нужно убрать из таблицы персонала ссылку на график работы. А в таблицу график работы добавить ссылку на персонал. Кроме этого вместо поля WorkPlan можно сделать два поля StartWorkPlan и FinishWorkPlan.
В этом случае при добавлении в график служащего мы будем в таблице WorkSchrdule указывать на него ссылку, дату начала и дату завершения. Связь один ко многим поскольку одному служащему будет соответствовать множество записей в таблице расписания работ. Что нам это дает: Фильтруем таблицу WorkSchrdule по полю id_personal и получаем данные о расписании работ только одного служащего. Использование StartWorkPlan и FinishWorkPlan позволит хранить информацию о интервале времени на работу (хотя если интервал времени всегда один и тот же, то можно отказаться)
0
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 28.03.2012, 15:25 [ТС] | |
|
Да, в принципе суть не сильно замысловатая. Нужно реализовать возможность при выборе сотрудника в комбобоксе, увидеть его часы приема(ну грубо говоря в чекед лист боксе) и мочь на них записаться(занять), чтобы при последующем выборе, то время что уже занято, выбрать было нельзя.
Ваши рекомендации принял, сейчас буду провобовать. Со стартом и финишем пока сложно. Мне бы так реализовать Добавлено через 17 часов 59 минут Ребят все вроде получилось! Но вот я думаю, а внешнюю таблицу создать для 2 сущностей из разных таблиц, ну для удобства ввода данных и их считывания!?
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 28.03.2012, 16:23 | |
|
0
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 28.03.2012, 18:31 [ТС] | |
|
Ну я имел ввиду еще одну таблицу сделать для внешних ключей!? Или туплю!?
Просто я не смог ввести данные в каком то одном месте. Я задаю параметры ввода в SQL строке, но не могу сообразить как задействовать таблицу WorkShedule Грубо говоря у меня комбобокс, и дататаймпикер как-то не связываются. Точнее я не знаю как их в запросе связать. Ведь таблице WorkSchedule ссылка имеет int значение. Примерно моя попытка выглядела так INSERT WorkPlan INTO WorkSchedule Value (@date) WHERE PersonalID='cmbxPersonal.Text' Я конечно понимаю что тут надо как-то преобразовать значения, но не знаю, поэтому и думаю на счет 3-й таблицы в который были бы собраны по fk персонал и дата. Блин пишу наверное бред. Приду домой все конкретно распишу!
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
||||||
| 29.03.2012, 10:48 | ||||||
|
1. Потому что надо так INSERT INTO WorkSchedule (перечисляем здесь поля таблицы) VALUES (перечисляем здесь значения для вставки) 2. Вот это здесь не катит - WHERE PersonalID='cmbxPersonal.Text' покскольку добавляем через VALUES 3. Если у вас комбобокс связан с источником данных и настроен на работу с ним, то тогда значение надо брать не из поля Text, а из поля Value.
0
|
||||||
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 31.03.2012, 16:34 [ТС] | |
|
Итак, попытаюсь объяснить, что конкретно мне непонятно в этом вопросе. И почему у меня работа со связанными таблицами вызывает такое непонимание. Постараюсь лаконичнее объяснить.
1. У меня есть форма в которой я формирую график работы. На ней расположены 1 Комбобокс и 1 дататаймпикер Задачи контролов: в комбобоксе у меня подтянуты сотрудники (парикмахеры, массажисты, маникюршицы и т.д. по фамилиям не по специальностям). В дататаймпикер, дату которую я хочу выбрать и для установления рабочего дня(дней), конкретной фамилии(сотруднику). Действие: Открываем комбобокс, выбираем Иванову Светлану, далее открываем датапикер, выбираем дату тыкаем, открываем опять, опять тыкаем, и так тыкаем в разные даты столько раз, сколько Иванова должна быть по графику на работе. Тем временем, как я понимаю инфа будет писаться в таблицу WorkShedule, поле WorkPlan, c ссылкой на IDСотрудника Ивановой. Вот это я не знаю как написать в запросе!!!
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 31.03.2012, 16:44 | |
|
Запрос для сохранения данных в таблице должен выглядеть следующим образом:
INSERT INTO WorkSchedule (WorkPlan, IDСотрудника) VALUES (Значение_из_контрола_с_датой, Значение_из_контрола_с_сотрудником)
0
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 31.03.2012, 17:33 [ТС] | |
|
Пробую....
Добавлено через 21 минуту предварительный вопрос, а IDСотрудника не будет конфликтовать с Текстовым значением Значение_из_контрола_с_сотрудником Добавлено через 26 минут Ну вот как и ожидалось! Эксепшен: Конфликт типов операндов Text несовместим с Int
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 31.03.2012, 22:44 | |
|
Так все правильно! У вас же вопрос был относительно запроса!!! А тему извлечения данных из контролов я даже не поднимал, потому, что нет информации. У вас не с запросом проблемы, а с извлечением данных и последующей генерацией его (запроса). К тому же вы еще и не сказали на каком языке кодируете (под какой платформой).
1
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 31.03.2012, 23:59 [ТС] | |
|
Пишу на С# MS-SQL, но думаю что для SQL строки это не критично.
Смотрите, мне же нужно внести данные в БД это первая задача, я сейчас не говорю о выборке из таблицы. Вы мне дали правильны ответ с точки зрения моего вопроса, но вот конструкция ошибочна. Вот я не понимаю как ввести данные в таблицу, поэтому вводил в SQl команду конструкцию WHERE, но синтаксически она у меня не верна. Поэтому и спрашиваю как сдлать ее правильной.
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 01.04.2012, 00:30 | |
|
Конструкция абсолютно точная. глянуть можно здесь - http://msdn.microsoft.com/ru-r... 74335.aspx.
Думаю проблема в том, что вы не показываете: 1. Как осуществляться настройка подключения к SQL-server; 2. Как осуществляется "сборка" строки запроса; 3. Как осуществляется выполнение запроса. Нужен код, чтобы я или кто-то, кто достаточно хорошо разбирается в ado.net, смог вам помочь. При этом возможно вопросы снимутся сами собой если вы прочитаете все закрепленные темы на ветке https://www.cyberforum.ru/ado-net/ Я хорошо понял, что вы хотите сделать на уровне объектов базы данных, а вот с клиентской частью вам скорее всего придется объяснять все заново.
0
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 01.04.2012, 00:36 [ТС] | |
|
Короче единственное что придумал, это "костыли" в виде добавления еще однго текстбокса, подвязал на него ID, который меняется в зависимости от выбора в комбобоксе ФИО сотрудника.
Теперь пользуюсь вашим SQL запросом но Значение_из_контрола_с_сотрудником - теперь служит новый текстбок с айдишкой. В принципе сделаю его сейчас невидимым и все будет ок! Хотя конечно извращение. Если вдруг у кого-нибудь найдется еще решение тема все еще актуальна.
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 01.04.2012, 00:47 | |
|
Так комбо-бокс же настраивается на заполнение из источника данных (свойство DataSource). вы типизированный датасет используете или вручную все объекты пишете?
После настройки можно будет брать значение из SelectdValue и никаких лишних котролов не надо будет.
0
|
|
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
||||||
| 01.04.2012, 01:08 [ТС] | ||||||
|
Именно!
katon - вроде все получается. На комбо повешена DataSourceX(пример) который тянет таблицу Personal(ID, Name и на всякий случай Speciality). Далее на SelectesValue кидаю Name (DataSourceX-a), а к текстбоксу клею из того же датасорса уже ID. Получается что когда выбираю в комбо Фио, в текстбоксе определяется ИД, вот его то и пишу в базу по вашей строке.
0
|
||||||
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|||||||||||
| 01.04.2012, 01:33 | |||||||||||
Вы код частями выдирали? а то тут не видно что это и close() для подключения к базе. Добавлено через 42 секунды И еще где ошибку выдает (строка)?
0
|
|||||||||||
|
9 / 9 / 1
Регистрация: 20.12.2010
Сообщений: 192
|
|
| 01.04.2012, 10:25 [ТС] | |
|
Нигде ошибок не выдает. Все исправно работает. Я же пишу что все получилось. Соединение не закрыл каюсь.
Комбобокс не виден потому, что он у меня переключателем служит. Переключил Иванову, в текстбоксе появилась цифирка ID=1, переключил с Ивановой на Петрову, в текстбоксе появилась цифирка ID= 5(соответствующая Петровой). Вот и все текст бокс это компромис, который помогает избежать конфликта операндов (text в int). Вот и все! Код естественно выдрал из обработчика событий. Все остально сгенерено студией.
0
|
|
| 01.04.2012, 10:25 | |
|
Помогаю со студенческими работами здесь
20
Отношение между таблицами Отношение между таблицами Отношение между двумя таблицами Отношение между несколькими таблицами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|