C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенос данных в связанных таблицах  (Прочитано 1432 раз)
VlaStr
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 2


Перенос данных в связанных таблицах
« : 05 Декабрь 2015, 11:49:53 »

Здравствуйте уважаемые форумчане !
Прошу совета.
Ситуация следующая : SQL Server Express. Есть три таблицы - "сотрудники" (поля USER_ID, FIO и т.д. ),
"техника" (поля USER_ID, UNIT_ID, TYPE и т.д.), "история перемещений" (поля UNIT_ID и т.д.).
Таблица "техника" является подчиненной таблицы "сотрудники",
а "история перемещений" - подчиненной к таблице "техника" (связи видно видно по названию полей).
Сложность - при процедуре передачи техники от одного сотрудника другомую.
Как передать, скажем, принтер от Иванова к Петрову, чтобы при этом вместе с принтером
перрехала история всех его перемещений ?
То есть, у записи "принтер" в таблице "техника" надо изменить ключевое поле "USER_ID" с ID Иванова на
ID Петрова - но явно это сделать система не даёт.
Пользуюсь компонентами TTable.
Подскажите, как быть ?
Заранее спасибо.   
Записан
gen
Участник


Сказали спасибо: +28/-0
Offline

Сообщений: 52


Re: Перенос данных в связанных таблицах
« Ответ #1 : 08 Декабрь 2015, 15:07:45 »

У Вас несколько неправильная для указанной задачи структура данных.
Таблица - "сотрудники" (поля USER_ID, FIO и т.д. ) согласен.
Таблица - "техника". Тут не должно быть ссылки на "сотрудники", т.е. USER_ID из таблицы удалить.
Таблица - "история перемещений". Должна объединить "сотрудники" и "техника", т.е. должна быть, к примеру, такой: (ID_перемещения, USER_ID, UNIT_ID, ДАТА_начала, ДАТА_конца).
Таким образом, каждой единице техники в таблице  "история перемещений" должна быть хоть 1 запись, означающая, что техника UNIT_ID установлена у пользователя USER_ID с даты "ДАТА_начала". При перемещении к другому пользователю в таблицу "история перемещений" соответственно добавляется еще 1 запись: техника UNIT_ID ,USER_ID, ДАТА_начала (а в предыдущей записи по данной технике устанавливается ДАТА_конца). В результате имеем по каждой единице техники полную историю перемещений в любой момент времени.
Пример содержимого таблицы "история перемещений":
1  ID_Иванов   ID_принтер   '01.06.2015'    null                       --принтер находится у Иванова с '01.06.2015'  и никуда не перемещался

2  ID_Петров   ID_монитор   '10.08.2015'   '01.12.2015'            --монитор изначально был у Петрова с '10.08.2015' до '01.12.2015'
3  ID_Сидоров ID_монитор   '01.12.2015'   null                        --монитор переместили от Петрова к Сидорову с ' 01.12.2015', где он и находится (пустая "ДАТА_конца")
Записан
VlaStr
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 2


« Ответ #2 : 09 Декабрь 2015, 09:05:34 »

Спасибо за ответ, Gen. Для меня здесь главное не только любыми путями решить проблему, но и освоить методы. Всё же хотелось бы и принцип понять, как правильно переподчинять записи в связанной таблице. Указанную мной задачу ваяю "для души", никто не подгоняет. В экземплах к CBuilder-у 6 есть в папке DBTask есть пример MastApp, так вот там вроде как работает такой принцип, но с помощью TDBLookupComboBox. 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.04 секунд. Запросов: 21.