Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить записи в две связанные таблицы 
:(
    Опции темы
1grib
  Дата 2.5.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Как добавить записи в две связанные таблицы, отношением 1 ко многим?? Например, таблица программистов и программ. 1 программу делает 1 прораммист. 1 программист делает много программ.
Вариант 1: программист уже внесён в базу,
2: добавлять надо и программу и программиста.
PM MAIL   Вверх
Akina
Дата 3.5.2005, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Берем хелп и читаем про использование триггеров.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
1grib
Дата 3.5.2005, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Ага!!!!!! Значит всётаки тригеры надо пользовать.
Хелп я уже читал. И про триггеры тоже читал smile Я сомневался действительно ли триггерами это реализовать - правильно.
Akina, вот как я себе это представляю, поправь если ошибаюсб
1. вызывая хранимую процедуру вставляем запись в одну таблицу(о программе), туда же передаем фамилию программиста
2. срабатывает триггер INSERT, UPDATE, в котором вызывается другая процедура добавляющая запись о программисте (вот блин, как в триггер, точнее во вторую процедуру передать программиста??),
3. вторая процедура проверяет сначала чтоб фамилии не повторялись.
4. при удалении программы, должен срабатывать DELETE-триггер, проверяющий остались ли у данного программиста программы и если нет то вызывается процедура удаляющая его.(идея! можно же его удалить прям из триггера. или нет?)
5. перед удалением программиста ещё один триггер проверяет есть ли у него программы и не вызывает процедуру удаляющую его

Извините что так нудно всё это пишу, хочется разобраться smile smile smile
Если где видите глупость/неоптимальность и т.д. неполенитесь написать!
PM MAIL   Вверх
AntonSaburov
Дата 3.5.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Лично мне нравиться делать все просто через Stored Procedure. Там можно развлекаться как угодно.
Триггер все-таки больше интересен для целостности данных. Хотя если необходимо, чтобы было именно сразу в двух таблицах и никак иначе, то наверно можно такое сотворить. Но лично я предпочитаю SP.
PM MAIL WWW ICQ   Вверх
1grib
Дата 4.5.2005, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Эх ....
Цитата
Лично мне нравиться делать все просто через Stored Procedure

КАК????? smile smile
PM MAIL   Вверх
Papirus
Дата 4.5.2005, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(1grib @ 4.5.2005, 03:14)
КАК?????


Плохо представляю реализацию ввода данных, поэтому может ошибусь, но возможно решить проблему примерно с помощью такой последовательности:
1. в процедуру передается имя программиста.
2. первый селект определяет есть ли такой в таблице (т.е. пытается получить ID программиста и присвоить знаячение переменной)
3. Если нет (значение переменно Is Null) - добавляем его инсертом и определяем его ID (присваиваем переменной п.2 @@IDENTITY)
4. вставляем данные о программах, а в поле ID программиста - указываем значение переменной.


PM MAIL ICQ   Вверх
1grib
Дата 5.5.2005, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



у меня вот тут идея появилась, может я всё через ... делаю, может ну их на фиг все эти процедуры/триггеры и т.д. Вот в PARADOX'овскую базу я данные добавлял с помощью DBEdit, DBLookupComboBox и т.д. и прекрасно работало и работает. Или всё же есть неоходимость делать так, через ... ??
PM MAIL   Вверх
Akina
Дата 5.5.2005, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



1grib
Иметь средства (прекрасные, кстати, по всем параметрам) и не использовать их...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
1grib
Дата 5.5.2005, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Не понимаю, не вижу превосходства одного способа над другим (догадываясь при этом что ваш лучше. Мне и самому интереснее сделать так) поэтому мне и необходимо понять чем эти средства прекраснее моих!

Это сообщение отредактировал(а) 1grib - 5.5.2005, 14:58
PM MAIL   Вверх
Akina
Дата 5.5.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Если использовать триггеры и/или хранимые процедуры, то:
1) всю работу выполняет сервер, а не клиентская станция
2) снижается нагрузка на сеть (меньше трафик)
3) многопользовательский режим (ни локи, не прочая дрянь не мешают) - это забота сервера
4) контроль целостности - это забота сервера (работа триггера или процедуры - одна транзакция, если внутри не задано иное)
5) унификация процедуры (возможно использование несколькими БД)
6) упрощение поддержки и обновления (это тебе не апдейт клиента на сотне АРМов)
и т.д., и т.п... надоело...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
1grib
Дата 5.5.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Здорово. Вот теперь уж точно я не позволю себе лениться, буду дальше мучить процедуры и т.п.
Много почерпнул из этих двух топиков. Всем спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.