Maison  >  Questions et réponses  >  le corps du texte

Nouvelles entrées uniquement : mettre à jour les champs récemment ajoutés

J'essaie de trouver un moyen de pouvoir mettre à jour le code unitaire de tout nouveau produit unitaire, tout en conservant le code unitaire d'origine pour les produits unitaires déjà créés.

Autrement dit, si le code de l'unité change entre les sujets proposés, je souhaite que le code de l'unité reflète le code exact au moment où le cours unitaire a été créé.

Voici mon formulaire

CREATE TABLE Units (
    UnitsID                 INT(10) AUTO_INCREMENT,
    UnitsName               VARCHAR(255) NOT NULL,
    UnitsCode               VARCHAR(20) NOT NULL UNIQUE,
    PRIMARY KEY (UnitsID)
);

CREATE TABLE UnitsOffering (
    UOfferingID             INT(10) AUTO_INCREMENT,
    UOUnits                 INT(10) NOT NULL, 
    YIIntake                VARCHAR(255) NOT NULL,
    YIYear                  INT(4) NOT NULL,  
    PRIMARY KEY             (UOfferingID),
    FOREIGN KEY             (UOUnits) REFERENCES Units(UnitsID)
);

Je peux le mettre à jour en utilisant la procédure stockée actuelle, mais lorsque je répertorie les produits unitaires et les détails de l'unité, cela reflète le nouveau code de l'unité, et non le code qui se trouvait dans la base de données lors de la création du produit.

CREATE PROCEDURE UpdateUnit(IN vUnitsID VARCHAR (255), IN vUnitsCode VARCHAR (20))
BEGIN
UPDATE Units 
SET UnitsCode = vUnitsCode
WHERE UnitsID = vUnitsID;
 END;

C'est l'instruction select que j'utilise lors de la création de la liste.

SELECT  O.UOfferingID, U.UnitsCode, U.UnitsName, O.YIIntake, O.YIYear
        FROM (UnitsOffering O
        INNER JOIN Units U
        ON  O.UOUnits = U.UnitsID)
        ORDER BY O.UOfferingID;

Je ne sais pas si cela peut réellement être fait. Si cela a du sens, je ne sais pas s'il y a quelque chose qui ne va pas dans la façon dont ma table est configurée, dans l'instruction update ou dans l'instruction list.

Toute aide serait grandement appréciée. J'ai essayé de consulter de la documentation pour voir comment procéder, mais je n'ai pas trouvé le bon mot-clé.

Voici des exemples de ce que j’aimerais pouvoir énumérer. Pour cet exemple, ce que je veux qu'il affiche si le code de l'unité change après la fin de 2021.

COS10000 - Introduction to Programming - Semester 2 2021
INF30011 - Database Implementation -  Semester 1 2022
COS10059 - Introduction to Programming  - Semester 2 2022

P粉148782096P粉148782096181 Il y a quelques jours394

répondre à tous(1)je répondrai

  • P粉463840170

    P粉4638401702024-04-03 16:16:54

    Il existe deux méthodes possibles :

    1. Lors de la création d'un nouvel enregistrement dans UnitsOffering, écrivez physiquement la valeur UnitCode dans l'enregistrement (dans une nouvelle colonne) au lieu de créer un lien vers la valeur dans la table Units via FK
    2. Redessinez la table des unités afin qu'elle contienne l'historique, par exemple, toutes les modifications sont traitées comme des insertions, pas des mises à jour, et chaque enregistrement a une date de début/fin (ou un autre moyen d'identifier quand un enregistrement est un mécanisme actuel). Il doit ensuite y avoir une logique pour garantir que la valeur correcte est écrite dans UnitsOffering.UOUnits

    répondre
    0
  • Annulerrépondre