2010-11-10 2 views
0

J'ai cette limitation que je dois implémenter côté serveur (dans la base de données). Normalement, je le ferais du côté client, mais je comprendrais pourquoi ne pas apprendre l'aspect du serveur. : PComment puis-je créer ce déclencheur pour Microsoft SQL Server?

Je ne veux pas que mes clients pour être en mesure de louer un film du genre XXX si elles sont moins de 18 ans

Voici le script que j'utilisé pour générer les tables:

-- ============================================= 
-- 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 
) 

J'ai demandé à un ami ce que je devrais utiliser et il a dit un déclencheur, mais je crois comprendre qu'un déclencheur est une fonction qui est exécutée lorsque les conditions des déclencheurs sont remplies, non? Si j'utilisais un trigger je devais insérer puis supprimer un enregistrement vilain non?

Merci pour l'aide.

+4

Vous devez toujours effectuer toutes les validations sur le serveur. (Même si c'est aussi fait sur le client) – SLaks

+0

Ne peut jamais être trop en sécurité! –

+0

Je faisais référence à vos autres validations, ce qui, selon vous, ne se fait pas sur le serveur. **Ils devraient être**. – SLaks

Répondre

1

Lisez tout sur triggers here

Ils viennent dans beaucoup de saveurs, ils peuvent courir avant chaque insertion/après chaque mise à jour et ainsi de suite. Le déclenchement du déclencheur est une action de couverture, si vous avez un déclencheur BEFORE, il fonctionnera toujours avant.

Ensuite, si vous souhaitez effectuer un filtrage ou une gestion des erreurs, par exemple, n'exécutez qu'un bit de code si une colonne particulière a une valeur particulière, incluez-la dans le déclencheur (en code conditionnel).

Généralement, je déconseille d'utiliser des déclencheurs, ils peuvent souvent rendre le verrouillage plus compliqué et sont "cachés" dans un endroit que personne n'a tendance à regarder (ce qui les rend très difficiles à déboguer).

Une autre approche que vous pouvez prendre DB-sage, il a process particuliers stockés que vous appelez, au lieu d'appeler directement les tables, par exemple: spRentMovie.

Questions connexes