1
votes

Comment stocker des listes d'options dans une application Web

Nous sommes en train de concevoir une nouvelle base de données et je ne sais pas comment je veux stocker mes listes d'options.

Par exemple, si vous avez une liste de priorités:

id description
1  High
2  Medium
3  Low
  • Beaucoup plus facile à maintenir, pas besoin de pousser du code. Vous ajoutez simplement des pages de maintenance pour éditer les tables.
  • De nombreux autres appels de base de données, chaque fois que vous souhaitez récupérer la liste.

Option 2

  • Moins d'appels sur la base de données.
  • Si la liste doit être modifiée, vous devez changer le code, puis envoyer le code.

Ai-je manqué quelque chose? Quelle est la pratique courante?

Cheers


0 commentaires

3 Réponses :


0
votes

Je le fais généralement avec la base de données et les clés étrangères. Vous êtes déjà en train de consulter la base de données pour obtenir des informations, avec un simple vous pouvez saisir la bonne valeur au lieu de l'identifiant.

Mais si ce ne sont que ces 2 listes ... Je ne suis pas sûr, j'essaie de ne pas utiliser les valeurs codées en dur
dans mon code pour apporter des modifications faciles sans mettre à jour le serveur de production.


0 commentaires

0
votes

J'irais avec l'option 2:

Vous pouvez le mettre dans un tableau dans un fichier séparé, en dehors de votre code, donc ce serait plus facile à gérer, comme:

types.php

<?php
return ['type' => ['email','phone','text']];

Et l'exige là où tu en as besoin:

require '/types.php';

Stocke le tableau dans une variable comme $ options et utilisez $ options ['type'] dans votre code.

Bien sûr, vous devrez pousser à nouveau votre code. Une autre option serait de le mettre en cache.


0 commentaires

4
votes

Je déciderais en fonction des facteurs suivants:

1. Nombre de valeurs disponibles:

S'il ne s'agit que d'un ensemble de 2 ou 3 valeurs prédéfinies telles que les priorités High , Medium , Faible .. Je préférerais l'avoir dans la base de code en tant que constantes. Parce qu'il est hautement improbable qu'une nouvelle option soit ajoutée comme très bas ou très très bas etc

Si les valeurs sont prédéfinies mais grandes en nombre, comme peut-être les compétences d'un employé .. Je le mettrais certainement dans une table de base de données.

2. Possibilité de modification des valeurs:

Si ces valeurs changent fréquemment et que vous souhaitez donner le contrôle à l'utilisateur, peut-être via un panneau d'administration pour gérer ces valeurs, stockez-les dans la table de la base de données. P >

3. La fréquence d'utilisation:

Si ces valeurs sont au cœur de votre système et qu'elles sont donc utilisées dans presque toutes les requêtes pour filtrer les résultats, vous devez également tenir compte des performances:

Par exemple: disons que tout le projet dépend des priorités Elevé , Moyen , Faible . Vous devez filtrer presque toutes les requêtes en utilisant les priorités, puis:

Avoir des constantes aura la priorité stockée dans la table tâches :

$task = Task::whereHas('priority', function($q){
    return $q->whereIn('priority_name', ['high', 'low']);
})->get();

Avoir une table séparée priorités et avoir une relation avec les tâches utilisant la clé étrangère priority_id aura: p >

$tasks = Task::whereIn('priority', [high_constant, low_constant])->get();

En fonction du nombre de données dont vous disposez et des requêtes fréquentes que vous faites, vous pouvez vérifier ce qui affecte les performances. Si la différence est très petite, je préférerais les constantes avec les points 1 et 2 pris en compte.

4. Des extras comme Obtenir l'ID:

Disons que vous avez une page pour créer une nouvelle tâche avec une liste déroulante de priorités.

Si vous avez une table séparée, vous devrez obtenir l'ID de cette priorité dans la table priority pour l'enregistrer en tant que clé étrangère lors de l'enregistrement de la tâche dans les tâches table. (Vraiment pas énorme mais bon à mentionner)

Si vous avez une constante, vous pouvez enregistrer cette valeur directement.

Chacun d'entre eux ayant des avantages et des inconvénients, je ferais mon choix principalement aux points 1 et 2 ci-dessus.

De plus, si vous créez des constantes, je vous suggère de faire un laravel façade avec un alias et ont ensuite des constantes définies. Vous pouvez donc l'utiliser quelque chose comme tout au long de votre projet

Priority :: HIGH ou Priority::LOW


0 commentaires