Structure de la base de données
Architecture de la base de données
OC Lettings utilise SQLite 3 comme système de gestion de base de données. La structure est organisée en trois applications Django distinctes.
Schéma relationnel
Diagramme ER simplifié
┌──────────────────┐
│ auth_user │
│──────────────────│
│ id (PK) │
│ username │
│ first_name │
│ last_name │
│ email │
│ password │
└──────────────────┘
│
│ 1:1
▼
┌──────────────────┐
│ profiles_profile│
│──────────────────│
│ id (PK) │
│ user_id (FK) │
│ favorite_city │
└──────────────────┘
┌──────────────────┐
│lettings_address │
│──────────────────│
│ id (PK) │
│ number │
│ street │
│ city │
│ state │
│ zip_code │
│ country_iso_code │
└──────────────────┘
│
│ 1:1
▼
┌──────────────────┐
│ lettings_letting │
│──────────────────│
│ id (PK) │
│ title │
│ address_id (FK) │
└──────────────────┘
Modèles de données
Application : lettings
Address
Représente une adresse physique d’un bien immobilier.
Table : lettings_address
Champ |
Type |
Description |
|---|---|---|
|
Integer (PK) |
Identifiant unique auto-généré |
|
PositiveInteger |
Numéro de rue (1-9999) |
|
CharField(64) |
Nom de la rue |
|
CharField(64) |
Ville |
|
CharField(2) |
Code état US (2 lettres, ex: CA) |
|
PositiveInteger |
Code postal US (jusqu’à 99999) |
|
CharField(3) |
Code pays ISO-3 (ex: USA) |
Exemple de données :
{
"id": 1,
"number": 7217,
"street": "Bedford Street",
"city": "Brunswick",
"state": "GA",
"zip_code": 31525,
"country_iso_code": "USA"
}
Letting
Représente une annonce de location associée à une adresse.
Table : lettings_letting
Champ |
Type |
Description |
|---|---|---|
|
Integer (PK) |
Identifiant unique auto-généré |
|
CharField(256) |
Titre de l’annonce |
|
ForeignKey (1:1) |
Référence vers Address |
Relations :
Relation OneToOne avec
AddressSuppression en cascade : si l’adresse est supprimée, le letting est supprimé
Exemple de données :
{
"id": 1,
"title": "Comfortable studio",
"address": {
"number": 7217,
"street": "Bedford Street",
"city": "Brunswick",
"state": "GA"
}
}
Application : profiles
Profile
Étend le modèle User de Django avec des informations supplémentaires.
Table : profiles_profile
Champ |
Type |
Description |
|---|---|---|
|
Integer (PK) |
Identifiant unique auto-généré |
|
ForeignKey (1:1) |
Référence vers auth_user |
|
CharField(64) |
Ville favorite (optionnel) |
Relations :
Relation OneToOne avec
django.contrib.auth.models.UserSuppression en cascade : si l’utilisateur est supprimé, le profil est supprimé
Exemple de données :
{
"id": 1,
"user": {
"username": "john_doe",
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com"
},
"favorite_city": "Buenos Aires"
}
Modèle User (Django)
Table : auth_user
Modèle standard de Django pour l’authentification.
Champ |
Type |
Description |
|---|---|---|
|
Integer (PK) |
Identifiant unique |
|
CharField(150) |
Nom d’utilisateur unique |
|
CharField(150) |
Prénom |
|
CharField(150) |
Nom de famille |
|
EmailField |
Adresse email |
|
CharField(128) |
Mot de passe hashé |
|
Boolean |
Accès admin |
|
Boolean |
Compte actif |
|
DateTime |
Date de création |
Migrations
Historique des migrations
Application lettings
0001_initial.pyCréation des tables
AddressetLetting.
Application profiles
0001_initial.pyCréation de la table
Profile.
Application oc_lettings_site
0001_initial.pyTables initiales (architecture monolithique v1.0).
0002_delete_old_models.pySuppression des anciens models et mise en relation des nouveaux modèles avec les anciennes tables après migration vers architecture modulaire.