Vous êtes sur la page 1sur 4

Correction TP 2 : La clause ALTER sous SQL SERVER

Create database STAGIAIRES

create table Stagiaire (

Code_Stgr int primary key,

Nom_Stgr varchar(30),

Prenom_Stgr varchar(30),

Date_Naissance date,

Tel_Fixe varchar(30),

Tel_Portable varchar(30),

E_Mail varchar(30),

Code_Groupe varchar(30) foreign key references Groupe(Code_Groupe)

create table Groupe (

Code_Groupe varchar(30) primary key,

Annee int,Code_Filiere int foreign key references Filiere(Code_Filiere)

create table Filiere (

Code_Filiere int primary key identity(1,2),

Libelle_Filiere varchar(30)

create table Module (

Code_Module int primary key identity(2,2),

Libelle_Module varchar(30)

create table Note (

Code_Stgr int foreign key references Stagiaire(Code_Stgr),

Code_Module int foreign key references Module(Code_Module),

Note_1 float,

Note_2 float,

Note_3 float,

primary key(Code_Stgr,Code_Module)

1. Année vaut 1 ou 2
alter table Groupe add constraint c_annee check(Annee in(1,2))

-- 2. Tél_Fixe commence par 05 et Tél_Portable par 06, les deux ne peuvent pas dépasser 10 chiffres

alter table Stagiaire add constraint c_fixe check (Tel_Fixe like '05________')

alter table Stagiaire add constraint c_portable check (Tel_Portable like '06________')

-- 3. L’e-mail doit contenir @ et .

alter table Stagiaire add constraint c_email check (E_Mail like '%@%.%')

-- 4. Les colonnes (Nom_Stgr, Prénom_Stgr, Date_Naissance) ne peuvent pas être, toutes les trois, redondantes

alter table Stagiaire add constraint c_coordonnes unique (Nom_Stgr,Prenom_Stgr,Date_Naissance)

-- 5. Code_Groupe dépend de l’année, s’il s’agit d’un groupe de première année alors le code ressemble à

-- G[un caractère entre A et H] et G[un chiffre entre 1 et 8]

alter table Groupe add constraint c_groupes check((Annee=1 and Code_Groupe like 'G[A-H]') or (Annee=2 and
Code_Groupe like 'G[1-8]'))

-- 6. Note_1, Note_2 et Note_3 sont comprises entre 0 et 20, s’elles ne sont pas remplies elles valent 0

alter table Note add default 0 for Note_1

alter table Note add default 0 for Note_2

alter table Note add default 0 for Note_3

alter table Note add constraint c_notes check(Note_1 between 0 and 20 and Note_2 between 0 and 20 and Note_3 between 0
and 20)

-- 7. Ajouter une colonne Moyenne à la table Note qui vaut : (Note_1 + Note_2 + Note_3)/3

alter table Note add Moyenne as (Note_1+Note_2+Note_3)/3

Exerceice2

-- 1. Créer la base de données GestionLogement

create database LOGEMENTS

-- 2. Créer les cinq tables en désignant les clés primaires mais pas les clés étrangères.

create table INDIVIDU(

N_IDENTIFICATION int primary key,

N_LOGEMENT int,NOM varchar(30),

PRENOM varchar(30),

DATE_DE_NAISSANCE date,

N_TELEPHONE varchar(30)
)

create table LOGEMENT(

N_LOGEMENT int primary key,

TYPE_LOGEMENT varchar(30),

ID_QUARTIER int,

NO int,

RUE varchar(30),

SUPERFICIE float,

LOYER float

create table QUARTIER(

ID_QUARTIER int primary key,

ID_COMMUNE int,

LIBELLE_QUARTIER varchar(30)

create table TYPE_DE_LOGEMENT(

TYPE_LOGEMENT varchar(30) primary key,

CHARGES_FORFAITAIRES varchar(30)

create table COMMUNE(

ID_COMMUNE int primary key,

NOM_COMMUNE varchar(30),

DISTANCE_AGENCE float ,

NOMBRE_D_HABITANTS int

-- 3. Créer les contraintes permettant de préciser les clés étrangères avec suppression et modification en cascade.

alter table INDIVIDU add constraint fk_INDIVIDU foreign key (N_LOGEMENT) references
LOGEMENT(N_LOGEMENT) on delete cascade on update cascade

alter table LOGEMENT add constraint fk1_LOGEMENT foreign key (TYPE_LOGEMENT) references
TYPE_DE_LOGEMENT(TYPE_LOGEMENT) on delete cascade on update cascade

alter table LOGEMENT add constraint fk2_LOGEMENT foreign key (ID_QUARTIER) references
QUARTIER(ID_QUARTIER) on delete cascade on update cascade

alter table QUARTIER add constraint fk_QUARTIER foreign key (ID_COMMUNE) references
COMMUNE(ID_COMMUNE) on delete cascade on update cascade

-- 4. Modifier la colonne N_TELEPHONE de la table INDIVIDU pour qu’elle n’accepte pas la valeur nulle.

alter table INDIVIDU alter column N_TELEPHONE varchar(30) not null


-- 5. Créer une contrainte df_Nom qui permet d’affecter ‘SansNom’ comme valeur par défaut à la colonne Nom de la table
INDIVIDU.

alter table INDIVIDU add constraint Def_Nom default 'SansNom' for NOM

-- 6. Créer une contrainte ck_dateNaissance sur la colonne DATE_DE_NAISSANCE qui empêche la saisie d’une date
postérieure

-- à la date d’aujourd’hui ou si l’âge de l’individu ne dépasse pas 18 ans.

alter table INDIVIDU add constraint ck_dateNaissance check (DATEDIFF(YEAR,DATE_DE_NAISSANCE,


GETDATE())>=18)

-- 7. Supprimer la contrainte df_Nom que vous avez défini dans la question 5.

alter table INDIVIDU drop constraint Def_Nom

Vous aimerez peut-être aussi