**Schema de base pour l'API REST de gestion de projets**
```sql
-- Création de la base de données
CREATE DATABASE projet_rest;

-- Connexion à la base de données
\c projet_rest

-- Création de la table d'utilisateurs
CREATE TABLE utilisateurs (
  id SERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  mdp VARCHAR(255) NOT NULL,
  nom VARCHAR(255) NOT NULL,
  prenom VARCHAR(255) NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- Création de la table de projets
CREATE TABLE projets (
  id SERIAL PRIMARY KEY,
  titre VARCHAR(255) NOT NULL,
  description TEXT,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- Création de la table de tâches
CREATE TABLE taches (
  id SERIAL PRIMARY KEY,
  titre VARCHAR(255) NOT NULL,
  description TEXT,
  projet_id INTEGER NOT NULL REFERENCES projets(id),
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- Création de la table de membres
CREATE TABLE membres (
  id SERIAL PRIMARY KEY,
  utilisateur_id INTEGER NOT NULL REFERENCES utilisateurs(id),
  projet_id INTEGER NOT NULL REFERENCES projets(id),
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE (utilisateur_id, projet_id)
);

-- Création de l'index sur la table d'utilisateurs
CREATE INDEX idx_users_email ON utilisateurs (email);

-- Création de l'index sur la table de projets
CREATE INDEX idx_projects_titre ON projets (titre);

-- Création de l'index sur la table de tâches
CREATE INDEX idx_tasks_projet_id ON taches (projet_id);

-- Création de l'index sur la table de membres
CREATE INDEX idx_membres_projet_id ON membres (projet_id);

-- Insert des données de démo
INSERT INTO utilisateurs (email, mdp, nom, prenom)
VALUES 
  ('john.doe@example.com', 'hashed_mdp', 'Doe', 'John'),
  ('jane.doe@example.com', 'hashed_mdp', 'Doe', 'Jane'),
  ('bob.smith@example.com', 'hashed_mdp', 'Smith', 'Bob');

INSERT INTO projets (titre, description)
VALUES 
  ('Projet 1', 'Projet 1'),
  ('Projet 2', 'Projet 2'),
  ('Projet 3', 'Projet 3');

INSERT INTO taches (titre, description, projet_id)
VALUES 
  ('Tâche 1', 'Tâche 1', 1),
  ('Tâche 2', 'Tâche 2', 2),
  ('Tâche 3', 'Tâche 3', 3);

INSERT INTO membres (utilisateur_id, projet_id)
VALUES 
  (1, 1),
  (2, 2),
  (3, 3);
```

**API REST pour gestion de projets**
```php
// Fichier de configuration
$ayarlar = [
  'dbname' => 'projet_rest',
  'username' => 'utilisateur',
  'password' => 'mdp',
  'host' => 'localhost',
  'port' => 5432,
];

// Fichier de connexion à la base de données
$dsn = "pgsql:host=$ayarlar[host];dbname=$ayarlar[dbname]";
$options = [
  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new PDO($dsn, $ayarlar['username'], $ayarlar['password'], $options);

// Fichier de modèle (Model)
class Utilisateur
{
  private $id;
  private $email;
  private $mdp;
  private $nom;
  private $prenom;

  public function __construct($id, $email, $mdp, $nom, $prenom)
  {
    $this->id = $id;
    $this->email = $email;
    $this->mdp = $mdp;
    $this->nom = $nom;
    $this->prenom = $prenom;
  }

  public function getId()
  {
    return $this->id;
  }

  public function getEmail()
  {
    return $this->email;
  }

  public function getMdp()
  {
    return $this->mdp;
  }

  public function getNom()
  {
    return $this->nom;
  }

  public function getPrenom()
  {
    return $this->prenom;
  }

  public function setDate($created_at, $updated_at)
  {
    $this->created_at = $created_at;
    $this->updated_at = $updated_at;
  }
}

class Projet
{
  private $id;
  private $titre;
  private $description;

  public function __construct($id, $titre, $description)
  {
    $this->id = $id;
    $this->titre = $titre;
    $this->description = $description;
  }

  public function getId()
  {
    return $this->id;
  }

  public function getTitre()
  {
    return $this->titre;
  }

  public function getDescription()
  {
    return $this->description;
  }

  public function setDate($created_at, $updated_at)
  {
    $this->created_at = $created_at;
    $this->updated_at = $updated_at;
  }
}

class Tache
{
  private $id;
  private $titre;
  private $description;
  private $projet_id;

  public function __construct($id, $titre, $description, $projet_id)
  {
    $this->id = $id;
    $this->titre = $titre;
    $this->description = $description;
    $this->projet_id = $projet_id;
  }

  public function getId()
  {
    return $this->id;
  }

  public function getTitre()
  {
    return $this->titre;
  }

  public function getDescription()
  {
    return $this->description;
  }

  public function getProjetId()
  {
    return $this->projet_id;
  }

  public function setDate($created_at, $updated_at)
  {
    $this->created_at = $created_at;
    $this->updated_at = $updated_at;
  }
}

class Membre
{
  private $id;
  private $utilisateur_id;
  private $projet_id;

  public function __construct($id, $utilisateur_id, $projet_id)
  {
    $this->id = $id;
    $this->utilisateur_id = $utilisateur_id;
    $this