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

id

Integer (PK)

Identifiant unique auto-généré

number

PositiveInteger

Numéro de rue (1-9999)

street

CharField(64)

Nom de la rue

city

CharField(64)

Ville

state

CharField(2)

Code état US (2 lettres, ex: CA)

zip_code

PositiveInteger

Code postal US (jusqu’à 99999)

country_iso_code

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

id

Integer (PK)

Identifiant unique auto-généré

title

CharField(256)

Titre de l’annonce

address_id

ForeignKey (1:1)

Référence vers Address

Relations :

  • Relation OneToOne avec Address

  • Suppression 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

id

Integer (PK)

Identifiant unique auto-généré

user_id

ForeignKey (1:1)

Référence vers auth_user

favorite_city

CharField(64)

Ville favorite (optionnel)

Relations :

  • Relation OneToOne avec django.contrib.auth.models.User

  • Suppression 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

id

Integer (PK)

Identifiant unique

username

CharField(150)

Nom d’utilisateur unique

first_name

CharField(150)

Prénom

last_name

CharField(150)

Nom de famille

email

EmailField

Adresse email

password

CharField(128)

Mot de passe hashé

is_staff

Boolean

Accès admin

is_active

Boolean

Compte actif

date_joined

DateTime

Date de création

Migrations

Historique des migrations

Application lettings

0001_initial.py

Création des tables Address et Letting.

Application profiles

0001_initial.py

Création de la table Profile.

Application oc_lettings_site

0001_initial.py

Tables initiales (architecture monolithique v1.0).

0002_delete_old_models.py

Suppression des anciens models et mise en relation des nouveaux modèles avec les anciennes tables après migration vers architecture modulaire.