SamForum.org  
SamLab.ws
Заблокированные пользователи

Вернуться   SamForum.org > Программирование > Базы данных
Важная информация

Ответ
 
Опции темы Опции просмотра
Помогите пожалуйста в решении задачи по SQL Server
Старый Добавлено: 02.05.2010, 13:18
  (#1)
White Charmer
Заслуженный
Заслуженный пользователь
 
Аватар для White Charmer

По умолчанию Помогите пожалуйста в решении задачи по SQL Server

Здравствуйте, уважаемые форумчане! Мне снова нужна ваша помощь в решении задач, на этот раз по SQL Server. Я вроде бы ее решил, но хотелось все же убедиться, что я сделал это правильно.
Вот, собственно, условия:
1)Создать таблицу "домашние животные" (id, имя, пол, цвет) и заполнить ее данными
2)Создать кластеризованный индекс по полю id
Вот как это сделал я:

Код:
CREATE TABLE dbo.Pets ( id INT, name char(10), gender char(1), color char(50))
CREATE CLUSTERED INDEX INDX1 ON dbo.Pets ( id )
INSERT INTO dbo.Pets VALUES (100, 'Принц', 'М', 'Черный')
INSERT INTO dbo.Pets VALUES (101, 'Тото', 'Ж', 'Желто-коричневый')
INSERT INTO dbo.Pets VALUES (102, 'Спайк', 'М', 'Желто-коричневый')
INSERT INTO dbo.Pets VALUES (103, 'Марла', 'Ж', 'Темно-коричневый')
INSERT INTO dbo.Pets VALUES (104, 'Наф', 'М', 'Серый')
INSERT INTO dbo.Pets VALUES (105, 'Фанни', 'Ж', 'Коричневый')
И вот тут возникает первый вопрос: какой тип данных лучше всего использовать для поля "пол"? Первоначально я подумал о логическом значении: true - М, false - Ж, однако я чего-то не нашел логический тип данных при визуальном проектировании таблицы в SQL Managment studio. Поля вроде ENUM из MySQL я тоже не обнаружил (хотя, вероятно, плохо искал).
Двигаемся далее:

3)Создать хранимую процедуру с входным параметром ID и вывести на экран подробные сведения о животном. Если пользователь не ввел ID, вывести все записи. Вот мое решение:

Код:
CREATE PROCEDURE dbo.SHOWDATA @PET_ID INT = 0 
AS
IF @PET_ID=0
	BEGIN
	SELECT * FROM dbo.Pets
	END
ELSE
	BEGIN
	SELECT * FROM dbo.Pets WHERE id=@PET_ID
	END
Здесь я присвоил параметру @PET_ID значение по умолчанию 0, чтобы процедура не вываливалась с ошибкой, если пользователь не ввел ID. Изначально я искал в объявлении процедуры что-то типа необязательных параметров, но опять-таки, не нашел

4)Создать триггер, который бы выводил сообщение подтверждения при успешном удалении записи из таблицы:

Код:
CREATE TRIGGER SHOWCONFIRM ON dbo.Pets AFTER DELETE
AS
PRINT 'ЗАПИСЬ УДАЛЕНА!'
Правильно ли я понимаю, что при ключевом слове AFTER этот триггер сработает ПОСЛЕ удаления записи, а если удаление записи произошло с ошибками (запись не удалена), то он не сработает?

Ну и на конец, 5) Создать триггер, который предотвратит удаление цвета домашнего животного "коричневый":

Код:
CREATE TRIGGER UNDODELETE ON dbo.Pets FOR DELETE
AS
BEGIN
IF (SELECT COLOR FROM deleted)='Коричневый'
PRINT 'Нельзя удалять коричневых домашних животных!'
ROLLBACK
END
Собственно, на этом все. Хотелось бы узнать мнение спецов по SQL, все ли я сделал правильно и может, где-то можно сделать лучше?
White Charmer вне форума Отправить личное сообщение для White Charmer
Вверх
Ответить с цитированием
Старый Добавлено: 02.05.2010, 17:44
  (#2)
L.E.O.
Пользователь
Пользователь
 
Аватар для L.E.O.

По умолчанию

1) В SQL Managment Studio логический тип это bit. То есть запрос примет вид:
Код:
CREATE TABLE dbo.Pets ( id INT, name char(10), gender bit, color char(50))
В Oracle этот тип называется BOOLEAN. В MySQL точно не помню, но там должно быть что-то похожее.

3) По мне так это лучшее решение (Прим.: здесь я сужу как программист, а не как админ).

4) При ключевом слове AFTER DELETE триггер срабатывает после успешного удаления записи в таблицы.

PS: я еще сделал бы поле id инкрементным.


Помог, скажи спасибо

Последний раз редактировалось L.E.O.; 02.05.2010 в 18:23..
L.E.O. вне форума Отправить личное сообщение для L.E.O.
Вверх
Ответить с цитированием
Этот пользователь сказал cпасибо за это полезное сообщение:
White Charmer (02.05.2010)
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.10
Copyright ©2000 - 2020, vBulletin Solutions, Inc. Перевод: zCarot

Время генерации страницы 0.05983 секунды с 15 запросами