![]() |
|
Модераторы: Akina |
![]()
|
|
| 1grib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 26.2.2005 Репутация: нет Всего: нет |
Как добавить записи в две связанные таблицы, отношением 1 ко многим?? Например, таблица программистов и программ. 1 программу делает 1 прораммист. 1 программист делает много программ.
Вариант 1: программист уже внесён в базу, 2: добавлять надо и программу и программиста. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Берем хелп и читаем про использование триггеров.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| 1grib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 26.2.2005 Репутация: нет Всего: нет |
Ага!!!!!! Значит всётаки тригеры надо пользовать.
Хелп я уже читал. И про триггеры тоже читал Akina, вот как я себе это представляю, поправь если ошибаюсб 1. вызывая хранимую процедуру вставляем запись в одну таблицу(о программе), туда же передаем фамилию программиста 2. срабатывает триггер INSERT, UPDATE, в котором вызывается другая процедура добавляющая запись о программисте (вот блин, как в триггер, точнее во вторую процедуру передать программиста??), 3. вторая процедура проверяет сначала чтоб фамилии не повторялись. 4. при удалении программы, должен срабатывать DELETE-триггер, проверяющий остались ли у данного программиста программы и если нет то вызывается процедура удаляющая его.(идея! можно же его удалить прям из триггера. или нет?) 5. перед удалением программиста ещё один триггер проверяет есть ли у него программы и не вызывает процедуру удаляющую его Извините что так нудно всё это пишу, хочется разобраться Если где видите глупость/неоптимальность и т.д. неполенитесь написать! |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Лично мне нравиться делать все просто через Stored Procedure. Там можно развлекаться как угодно.
Триггер все-таки больше интересен для целостности данных. Хотя если необходимо, чтобы было именно сразу в двух таблицах и никак иначе, то наверно можно такое сотворить. Но лично я предпочитаю SP. |
|||
|
||||
| 1grib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 26.2.2005 Репутация: нет Всего: нет |
Эх ....
КАК????? |
|||
|
||||
| Papirus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Плохо представляю реализацию ввода данных, поэтому может ошибусь, но возможно решить проблему примерно с помощью такой последовательности: 1. в процедуру передается имя программиста. 2. первый селект определяет есть ли такой в таблице (т.е. пытается получить ID программиста и присвоить знаячение переменной) 3. Если нет (значение переменно Is Null) - добавляем его инсертом и определяем его ID (присваиваем переменной п.2 @@IDENTITY) 4. вставляем данные о программах, а в поле ID программиста - указываем значение переменной. |
|||
|
||||
| 1grib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 26.2.2005 Репутация: нет Всего: нет |
у меня вот тут идея появилась, может я всё через ... делаю, может ну их на фиг все эти процедуры/триггеры и т.д. Вот в PARADOX'овскую базу я данные добавлял с помощью DBEdit, DBLookupComboBox и т.д. и прекрасно работало и работает. Или всё же есть неоходимость делать так, через ... ??
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
1grib
Иметь средства (прекрасные, кстати, по всем параметрам) и не использовать их... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| 1grib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 26.2.2005 Репутация: нет Всего: нет |
Не понимаю, не вижу превосходства одного способа над другим (догадываясь при этом что ваш лучше. Мне и самому интереснее сделать так) поэтому мне и необходимо понять чем эти средства прекраснее моих!
Это сообщение отредактировал(а) 1grib - 5.5.2005, 14:58 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Если использовать триггеры и/или хранимые процедуры, то:
1) всю работу выполняет сервер, а не клиентская станция 2) снижается нагрузка на сеть (меньше трафик) 3) многопользовательский режим (ни локи, не прочая дрянь не мешают) - это забота сервера 4) контроль целостности - это забота сервера (работа триггера или процедуры - одна транзакция, если внутри не задано иное) 5) унификация процедуры (возможно использование несколькими БД) 6) упрощение поддержки и обновления (это тебе не апдейт клиента на сотне АРМов) и т.д., и т.п... надоело... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| 1grib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 26.2.2005 Репутация: нет Всего: нет |
Здорово. Вот теперь уж точно я не позволю себе лениться, буду дальше мучить процедуры и т.п.
Много почерпнул из этих двух топиков. Всем спасибо. |
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |