@startuml

' PARAMETERS
skinparam linetype polyline
skinparam linetype ortho


title Base de données trafic V2I

package "Composant" #87CEEB {
abstract class Noeud {
  +ajouter_capteur() : void
  +transfér_capteur(N1:Capteur,N2:Capteur): Capteur
  +supprimer_capteur():void
}
Noeud"1" *-- "0..*,1..*"Capteur
class Capteur
Class Capteur{
  + numéro_série : int
  + modéle : string 
}
note bottom of Capteur : (numéro_série, modéle) primary key 
note top of Capteur : les infrastructutres ont au moins un capteur




class Infrastructure {
  +id  :int {unique}
 }
 
 package Composant_mobile #483D8B {
class Véhicule {
  +numéro_immatriculation : integer
  +marque : string 
  +modéle : string 
  +annee_production : date
  
 }
enum Type_voiture_spéciale {
  ORDINAIRE
  SAMU
  POMPIER
  POLICE
}
 
 
 class Moto{
   +capacité_moto : integer
 }
 class Camion{
    +capacite_maximale : integer
 }
 class Voiture {
 +type_voiture : Type_voiture_spéciale

 }
 }


}
  Noeud "1..*" - "1" Noeud 
(Noeud, Noeud) .. Communication
package "Communication" #4169E1 {
 class Communication {
  +type_communication : Type_communication
}
 enum Type_communication {
  UN_A_UN
  UN_A_PLUSIEURS
}
}
 


package "Evenement" #DDDDDD {
abstract  class Evenement {
  +timestamp :date
  +id_entite : integer
  +contenu {unique} :text
}

class accident {
  +gravité : integer
  +nombre_véhicule : integre
  +type_véhicule[1..*] : sting
}

class alert_meteo {
  +temps : string
  +température : integer
}
 
class detection_materiel {
 }
 
class traveau_routier {
 }
  
}
 package "localisation" #5F9EA0 {
class Position {
  +longitude : float
  +latitude : float 
}

class Commune  {
  +nom : string
  +code_postal : integer
} 
Commune "1" --"*" Position :  appartient
Noeud "1"--"1"Position  : se trouve dans 
 
}

Noeud <|--  Infrastructure 
Noeud <|--  Véhicule 
Capteur "1" -- "*" Evenement : détecte 
Evenement <|-- accident
Evenement <|-- alert_meteo
Evenement <|-- detection_materiel
Evenement <|-- traveau_routier
Véhicule <|-- Voiture
Infrastructure -[hidden]-> Capteur
Véhicule -[hidden]-> Capteur

Véhicule <|-- Moto
Véhicule <|-- Camion
Evenement "*" -- "1" Commune : se déroule dans
 Camion "0..1"--"*" Voiture : transporte
Communication "1" *-- "1" Evenement: produit


@enduml