Files
sql/banque.correction.md
2025-11-02 20:50:39 +01:00

53 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Corrections
## 1. Les titulaires
`person` : informations propres aux personnes physiques
- prénom, nom, date de naissance
`company` : informations propres aux entreprises
- raison sociale, numéro dimmatriculation, date de création
#### 1.5.1 Pourquoi séparer `person` et `company` ?
Parce que leurs attributs diffèrent (nom/prénom vs raison sociale).
Cela évite les colonnes inutiles et permet des contraintes spécifiques à chaque type.
#### 1.5.2 Pourquoi ne pas tout mettre dans une seule table holder ?
Cela forcerait la présence de nombreuses colonnes nulles. La séparation améliore la cohérence et la lisibilité du schéma.
#### 1.5.3 Quelle contrainte empêche dinsérer une person sans holder ?
La clé étrangère references holder(id) dans person.
### 1.6 Contôle de l'âge
Contrainte déclarative
```sql
alter table person
add constraint chk_person_minimum_age
check (birthdate <= current_date - interval '15 years');
```
Contrainte procédurale avec un trigger :
```sql
create or replace function check_person_age()
returns trigger as $$
begin
if new.birthdate > current_date - interval '15 years' then
raise exception 'Holder must be at least 15 years old';
end if;
return new;
end;
$$ language plpgsql;
create trigger trg_check_person_age
before insert or update on person
for each row execute procedure check_person_age();
```