Как я могу создать этот триггер для Microsoft SQL Server? - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть это ограничение, которое я должен реализовать на стороне сервера (в базе данных).Обычно я делаю это на стороне клиента, но я пойму, почему бы не изучить аспект сервера.: p

Я не хочу, чтобы мои клиенты могли арендовать фильм из жанра XXX, если им меньше 18 лет.

Вот скрипт, который я использовал для генерации таблиц:

-- =============================================
-- Sergio's Lab Tests MWA HA HA
-- =============================================

use AlquilerPeliculas

create table Client
(
    ID int primary key not null identity(1,1),
    Address nvarchar(1024) not null,
    Phone nvarchar(256) not null,
    NIT nvarchar(32) not null
)
go
create table Genre
(
    ID int primary key not null identity(1,1),
    Name nvarchar(256)
)
go
create table Movie
(
    ID int primary key not null identity(1,1),
    Name nvarchar(256) not null,
    IDGenre int foreign key references Genre(ID)
)
go    
create table Natural
(
    IDCliente int primary key references Cliente(ID),
    Age as datediff(d, FechaDeNacimiento,getdate())/365.00,


    Nombre nvarchar(1024) not null,
    ApellidoPaterno nvarchar(512) not null,
    FechaDeNacimiento datetime,
    Sexo varchar(1) not null check(Sexo='M' or Sexo='F')
)
go
create table Alquiler
(
    ID int primary key not null identity(1,1),
    FechaDeAlquiler datetime,
    Total nvarchar(20) not null,
    IDClient int foreign key references Client(ID)
)
go
create table Ejemplar
(
    ID int primary key not null identity(1,1),
    NumeroDeEjemplar nvarchar(256) not null,
    Descripcion nvarchar(1024),
    IDFormato int foreign key references Formato(ID),
    IDPelicula int foreign key references Pelicula(ID)
)
go
create table DetalleAlquiler
(
    ID int primary key not null identity(1,1),
    IDEjemplar int foreign key references Ejemplar(ID),
    IDAlquiler int foreign key references Alquiler(ID),
    PrecioDeAlquiler nvarchar(128),
    FechaDevolucion datetime,
    FechaDevolucionProgramada datetime
)

Я спросил друга, что мне следует использовать, и он сказал Триггер, но я понимаю, что триггер - это функция, которая запускается, когда выполняются условия триггера, верно?Если бы я использовал триггер, мне пришлось бы вставить, а затем удалить непослушную запись, верно?

Спасибо за помощь.

1 Ответ

1 голос
/ 10 ноября 2010

Узнайте все о триггерах здесь

Они бывают разных вкусов, они могут запускаться перед каждой вставкой / после каждого обновления и так далее.Запуск триггера является общим действием, если у вас есть триггер ДО, он всегда будет выполняться раньше.

Затем, если вы хотите выполнить какую-либо фильтрацию или обработку ошибок, например, запускать только кусочек кода, если конкретный столбец имеет определенное значение, вы включаете его в триггер (в условном коде).

Как правило, я рекомендую не использовать триггеры, они часто могут усложнить блокировку и «спрятаны» в месте, которое никто не ищет (что затрудняет их отладку).

Другой подход, который вы можете использовать для работы с БД, состоит в том, что у вас есть определенные хранимые процедуры, которые вы вызываете, вместо непосредственного вызова таблиц, например, spRentMovie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...