IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Référencement et intégrité


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut Référencement et intégrité
    Bonjour,

    Ma question se rapproche de celle-ci mais ne correspond pas tout à fait à ce que je souhaite.

    J'ai 2 tables, POINT et MESURE définis ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE POINT (
      ID SMALLINT NOT NULL,
      NOM_POINT VARCHAR(64));
     
    CREATE TABLE MESURE (
      ID SMALLINT NOT NULL,
      NOM_MESURE VARCHAR(100),
      VALEUR_MESURE NUMERIC(12, 2),
      POINT_1 SMALLINT,
      POINT_2 SMALLINT);
    Les champs POINT_1 et POINT_2 de MESURE sont des références de la table POINT. Je pensais mettre 2 clefs étrangères sur MESURE pour m'assurer de l'intégrité de la table mais POINT_1 et POINT_2 ne sont pas forcément saisis. Ils peuvent l'être à l'ajout d'un record, à la modification du record ou pas du tout.

    Je ne sais pas comment vérifier (de manière automatique comme des clefs étrangères) que les valeurs de POINT_1 et POINT_2 font références à des éléments de POINT.

    Je dois implémenter dans les triggers BeforeInsert ou BeforeUpdate ?

    Merci pour vos conseils.

    Lefju

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Pourquoi des triggers, rien à voir. Il faut simplement créer les contraintes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    alter table MESURE
    add constraint FK_MESURE_PT1
    foreign key (POINT_1) 
    references POINT (ID)
    on delete SET NULL;
     
    alter table MESURE
    add constraint FK_MESURE_PT2
    foreign key (POINT_2) 
    references POINT (ID)
    on delete SET NULL;
    Note : les ID feraient mieux d'être en BIGINT s'il s'agit de FB3 , GENERATED BY DEFAULT AS IDENTITY,
    les ID des deux tables devraient être en PRIMARY KEY
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Bonjour SergioMaster,

    Merci pour ton message.

    Avec ces contraintes je pourrai créer un record dans MESURE sans renseigner POINT_1 et/ou POINT_2 ?

    Note : les ID feraient mieux d'être en BIGINT s'il s'agit de FB3 , GENERATED BY DEFAULT AS IDENTITY,
    les ID des deux tables devraient être en PRIMARY KEY
    Oui je suis sous FB3, je passerai les ID en BIGINT et mes ID seront en PRIMARY KEY. A quoi correspond GENERATED BY DEFAULT AS IDENTITY ?

    Merci pour tes conseils.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Re,

    Oui, point_1 et point_2 pourront être null.

    A quoi correspond GENERATED BY DEFAULT AS IDENTITY ?
    Cela va faire de la colonne une colonne auto-incrémentée, que les développeurs de Firebird nomment aussi SEQUENCE ou GENERATOR,
    Pas besoin de gérer les numéros, personnellement je préfère la méthode des versions inférieures à base de Trigger mais cela fonctionne très bien
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Merci SergioMaster pour tout !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TList] Double référencement
    Par Pedro dans le forum Langage
    Réponses: 5
    Dernier message: 28/07/2004, 13h14
  2. [debutant] Contraintes d'intégrité définies sur un objet
    Par maysa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/05/2004, 14h57
  3. Question sur les contraintes d'intégrités
    Par eGGyyS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/04/2004, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo