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
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 146
    Points : 95
    Points
    95
    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
    Inscrit en
    janvier 2007
    Messages
    11 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 091
    Points : 28 521
    Points
    28 521
    Billets dans le blog
    27
    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
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

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

    Informations forums :
    Inscription : décembre 2010
    Messages : 146
    Points : 95
    Points
    95
    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
    Inscrit en
    janvier 2007
    Messages
    11 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 091
    Points : 28 521
    Points
    28 521
    Billets dans le blog
    27
    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
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

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

    Informations forums :
    Inscription : décembre 2010
    Messages : 146
    Points : 95
    Points
    95
    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, 14h14
  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, 15h57
  3. Question sur les contraintes d'intégrités
    Par eGGyyS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/04/2004, 14h51

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