---
# System prepended metadata

title: Introduction aux bases de données

---

# Introduction aux bases de données
## Introduction
#### Définitions :
 **Definition 1**: Une basede donnée représente un ensemble ordonné de données dont l'organisation est régie par un **modèle** de donnée
 **Definition 2**: le système de gestion de bdd peut être vu comme le logiciel qui prend en charge : 
* La structuration
* Le stockage
* La mise à jour
* La maintenance des données
C'est en fait l'interface entre la base de donnée et les multiples uilisateurs (ou leurs programme)

#### Remarque : 
- **bdd** = base de donnée
- **sgbd** = systeme de gestion de base de donnée

## Conception des bases de donnée relationnelles : 
La conception d'une bdd se fait en plusieurs étapes. Elle fait appel à des modèles pour représenter les objets qui composent les systèmes d'information et les relations qui éxistent entre ces **objets**.
La modélisation se décompose en 3 étapes principales. Celles-ci constituent 3 niveau d'abstraction différent : 
* **L'étape conceptuelle** : elle consiste à représente la bdd indépendament de toute considération informatique
* **L'étape logique** : adaptation du shéma conceptuel en tableau bidimentionel
* **L'étape physique** : implémentation informatique sur un sgbd relationnel

![image](https://hackmd.io/_uploads/SJSb3dq1R.png)


## Modèle entité associtation
### Entité
Ce modèle permet de distinguer les entitées qui constitue la bdd et les associations entre ces entitées.
On appele entitée un objet pouvant être identifié distinctement.
Chaques entitée est unique et est décrite par un ensemble de propriétées appelées atribut. Un ou plusieurs attributs permettent d'identifier de manière unique l'entitée, on parle alors d'**identifiant** ou de **clé**.

![image](https://hackmd.io/_uploads/S1P-lFqJR.png)


Une entitée peut avoir plusieurs occurences (ou parfois aucune) exemple : 


| num secu | nom  | prenom | ... |
|:--------:|:----:|:------:|:---:|
|  123456  | BIBI | Michel | ... |
|   ...    | ...  |  ...   | ... |

instance de Personne = occurence = tuple = entité type

### Assosiation
une associaion permet de définir un lien sémantique entre les entitées (un lien qui fait sens)
L'association permet de mettre en avant une partie des règles de gestion qui n'ont pas été satisfaite par la définition des entitées
Une association se caractérise par : 
- un nom (sous forme verbale)
- deux cardinalitées présentes sur les deu éxtrémitées du lien. Chaques cardinalitée est un couple de valeur min/max qui traduisent deux règles de gestion (une par sens)
![image](https://hackmd.io/_uploads/B1eINdK91R.png)

#### Remarques : 
* une association peut aussi avoir des attributs
* Les cardinalitées lesplus répendues sont les suivantes : 
    * 0,n
    * 1,n
    * 0,1
    * 1,1
* Une situation à modéliser peut avoir plusieurs shémas différents, chaques modèles présentant des avantages et des inconvénients.

## Le modèle relationel
Dans le modèle relationel, les entitées et les associations du schéma conceptuel sont transformé en tableau à deux dimmentions appelé relation
### Transformation d'une entitée en relation
- On peut représenter une relation sous forme de schéma ou de notation textuelle.
- l'identifiant de l'entitée devient la clé primaire (primary key)
- ![image](https://hackmd.io/_uploads/B1SVRFqyR.png)

### Transformation d'une association en relation
Il existe 2 cas : 
1. Association possédant au moin un cardinalitée 0,1 ou 1,1 
2. Association sans cardinalitée 0,1 ou 1,1

#### Cas 1:
![image](https://hackmd.io/_uploads/ryk7Mc5kA.png)
PK = Primary Key
FK = Foreign Key

#### Cas 2 : 
![image](https://hackmd.io/_uploads/BkDcQ9qJC.png)


Application :
shema entite association & relationel: 
un éleve est inscrit dans un établissement, il assiste à plusieurs cours, les cours sont géré par des enseignants, un enseinant peut travailler dans plusieurs établissements un établissement est géré par un directeur un directeur ne peut etre à la tete que d'un seul établissement

### Entite association : 
![image](https://hackmd.io/_uploads/Hktr_ccyC.png)
### Relationel : 
![image](https://hackmd.io/_uploads/SJVKuccJA.png)

## Les contraintes d'intégritée
pour respecter l'intégritée d'une bdd, il est nécessaire de répondre à certaines contraintes d'intégritée.

### 1. L'unicitée des clés
Une relation est un ensemble de tuples. Cet ensemble ne peut pas contenir d'éléments doubles. Il ne peut donc pas exister deux fois le même tuple dans une relation. Pour cela, une relation doit posséder une clé unique (clé primaire).

### 2. Les contraintes référentielles 
Au sein d'une bdd, les données doivent être utilisables et cohérentes même lorsequelles apparaissent dans plusieurs relations. De ce fait, il ne faut pas que l'on puisse supprimer des données qui dépendent les unes des autres. C'est l'intégritée référentielle qui va permettre de protéger ces relations. 
Autrement dit, l'intégrité référentielle vérifie qu'une valeur de clé étrangère éxiste bien en tant que valeur de clé primaire dans une autre table

### 3. Les valeurs nulles 
Lors de l'insertion d'un tuple dans une relation, il peut arriver que la valeur d'un attribut soit inconnu. On doit alors introduire la valeur conventionnelle nulle

#### Remarque : 
Les clés primaires ne peuvent prendre la valeur nulle

#### Les contraintes de domaine
Une relation est construite aà partir d'un ensemble de domaine.
Exemple : dans lecas d'un établissement nous pouvons supprimer les personnes agées de lus de 20 ans car il ne sont plus dans l'établissement.

## Les sgbd relationelles : 
:::info 
Conventions d'écriture : 
- ne jamais utiliser d'espaces ou d'accent dans les nom de bdd
- On évitera les mots réservés au SQL
- Convention concernant les commandes et les mots clé SQL : 
    - Ils doivent être écrit en majuscule
:::

### Création d'une bdd : (MySQL)
```sql=
CREATE DATABASE lycee CHARACTER SET 'utf-8'
````

### Suppréssion d'une bdd : 
```sql=
DROP DATABASE lycee
```

### Utilisation d'une bdd : 
```sql=
USE DATABASE lycee
```

### Creation d'une relation : 
```sql=
CREATE TABLE eleve (
num_ss INTEGER,
id_etablissement INTEGER,
nom VARCHAR(255),
prenom VARCHAR(255),
date_de_naissance DATE,
classe VARCHAR(5)
PRIMARY KEY num_ss,
FOREIGN KEY id_etablissement,
ON DELETE CASCADE
ON UPDATE CASCADE
)