classDiagram
    class Joueuse {
        identifiant
        nom
        prenom
        elo
        identifiant du club
    }
Formalisation des bases de données
Objectifs
Structurer une base de données pour qu’elle soit :
- efficace
- propre
- légère
- facile à maintenir
- pas de doublons et de redondances
- Moins de risques d’incohérences entre différentes parties de la base
- Stockage réduit, car les informations répétées sont éliminées.
1 Dépendances fonctionnelles
Une dépendance fonctionnelle indique qu’une colonne (ou un ensemble de colonnes) détermine de manière unique une autre colonne :
- X → Y
- X détermine Y
- Y dépend fonctionnellement de X
Si on connait X, on peut en déduire Y
Les axiomes d’Armstrong
| Nom | Description | 
|---|---|
| Réflexivité | (X, Y) → X | 
| Augmentation | Si X → Y, alors XZ → YZ | 
| Transitivité | Si X → Y et Y → Z alors, X → Z | 
- (nom, prenom) → nom
- id_joueuse → nom alors (id_joueuse, id_partie) → (id_joueuse, nom)
Règles dérivées
| Nom | Description | 
|---|---|
| Union | Si X → Y et X → Z, alors X → YZ | 
| Décomposition | Si X → YZ, alors X → Z et X → Y | 
| Pseudo-transitivité | Si X → Y et WY → Z alors WX → Z | 
Deux Propriétés
X → Y est élémentaire s’il n’existe aucun sous-ensemble strict Z inclus dans X tel que Z → Y
X → Y est directe s’il n’existe pas de Z tel que X → Z et Z → Y
- pas élémenaire : num_client, nom → adresse
2 Formes normales
Normalisation
La normalisation vise à organiser les données :
- en éliminant les redondances et les incohérences
- en préservant les dépendances fonctionnelles
- sans perdre d’informations
1ère forme normale
Une relation est 1NF si tous ses attributs sont atomiques.
- Une date est atomique
- Un nom est atomique
- Une liste de prénoms n’est pas atomique
- Est-ce qu’un adresse est atomique ?
- atomique : représente une seule information
- non atomique : plusieurs informations combinées
- assez subjectif
- dépend du cas d’utilisation
- si vous n’utilisez pas le champ adresse -> atomique
- si vous avez utiliser par exemple la ville -> pas atomique
 
2e forme normale
Une relation est 2NF si :
- elle est 1NF
- tout attribut non clé est en DF élémentaire avec la clé
Autrement dit, tous les attributs sont déterminés par la clé complète.
Exemple de relation non 2NF :
- joueuse(nom, prenom, dnais) → elo
- si par exemple (nom, dnais) → elo
- si nom et dnais suffisent pour déterminer le elo
 
3e forme normale
Une relation est 3NF si :
- elle est 2NF
- tout attribut non clé est en DF directe avec la clé
Autrement dit, un attribut ne peut pas dépendre fonctionnellement d’un autre attribut non clé.
Exemple de relation non 3NF :
- joueuse(id_joueuse, code_pays, capitale)
- id_joueuse → (code_pays, capitale)
- or code_pays → capitale donc DF non directe
Créer une table pays
- joueuse(id_joueuse, code_pays)
- pays(code_pays, capitale)
3 Modélisation UML
Unified Modeling Language
UML est un langage de modélisation graphique standardisé utilisé pour spécifier, visualiser, concevoir et documenter différents aspects des systèmes logiciels.
Il offre une série de diagrammes pour représenter différents aspects d’un système.
Modèles
Modèle conceptuel
Modèle physique
classDiagram
    class joueuse {
        id_joueuse SERIAL PK
        nom        VARCHAR50
        prenom     VARCHAR50
        elo        INT
        #id_club   INT
    }
- Conceptuel : niveau utilisateur (accents, espaces)
- Physique : niveau développeur (transposable directement en SQL)
Associations 1:n
classDiagram
    direction LR
    class joueuse {
        id_joueuse SERIAL PK
        nom        VARCHAR50
        prenom     VARCHAR50
        elo        INT
        #id_club   INT
    }
    
    class club {
        id_club   SERIAL PK
        nom       VARCHAR50
        ville     VARCHAR50
    }
    joueuse "*" -- "0..1" club
Associations multiples
classDiagram
    direction LR
    class joueuse {
        id_joueuse SERIAL PK
        nom        VARCHAR50
        prenom     VARCHAR50
        elo        INT
        #id_club   INT
    }
    
    class partie {
        #id_blanc     INT
        #id_noir      INT
        #id_resultat  INT
    }
    partie "*" --> "1" joueuse : jouée avec les blancs par ▶
    partie "*" --> "1" joueuse : jouée avec les noirs par ▶
Associations n:n
classDiagram
    direction LR
    class joueuse {
        id_joueuse SERIAL PK
        nom        VARCHAR50
        prenom     VARCHAR50
        elo        INT
        #id_club   INT
    }
    
    class participe {
        #id_joueuse     INT
        #id_tournoi     INT
    }
    class tournoi {
        #id_tournoi     INT
        nom             INT
    }
    joueuse "1" -- "*" participe
    participe "*" -- "1" tournoi
Outils
De nombreux outils existent pour faire des diagrammes UML, soit en mode graphique ou code, par exemple :