我有这个限制我必须实现服务器端(在数据库中)。通常我会在客户端这样做,但我想为什么不学习服务器方面。 :P
如果他们不满18岁,我不希望我的客户能够从XXX类型中租借电影。
以下是我用来生成表格的脚本:
-- =============================================
-- 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
)
我问了一个朋友我应该使用什么,他说了一个触发器,但我的理解是触发器是一个在满足触发条件时运行的功能,对吗?如果我使用了触发器,我必须插入然后删除一个顽皮的记录吗?
感谢您的帮助。
答案 0 :(得分:1)
阅读有关triggers here
的所有信息它们有多种口味,它们可以在每次插入之前/每次更新后运行,依此类推。触发器的触发是一揽子操作,如果你有一个BEFORE触发器,它将始终运行。
然后,如果要进行任何过滤或错误处理,例如,如果特定列具有特定值,则只运行一些代码,将其包含在触发器内(在条件代码中)。
一般来说,我建议不要使用触发器,它们通常会使锁定更加复杂,并且“隐藏”在没有人倾向于看的地方(这使得它们很难调试)。
您可以采用DB方式的另一种方法,它具有您调用的特定存储过程,而不是直接调用表,例如:spRentMovie。