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

Langage SQL Discussion :

Quelques erreurs SQL sans réponse


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Quelques erreurs SQL sans réponse
    Bonjour à tous,
    Je suis actuellement sur un projet et j'ai sur mon SQL certaines erreurs que je n'arrive pas à trouver, même à l'aide de la documentation.
    Voici mes erreurs :

    Mes Tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Create table Adherent (
    		numadh numeric(4) NOT NULL,
    		nom varchar(10) NOT NULL,
    		prenom varchar(10) NOT NULL,
    		adresse varchar(40),
    		telephone varchar(10),
    		skipper char (3) NOT NULL,
    		fonction varchar (15),
    		anneeadh numeric(4) DEFAULT '2013',
    		check (anneeadh between 1901 and 2014),
    		check (skipper = 'Oui' or skipper = 'Non'),
    		check (fonction = 'président' or fonction = 'vice-président' or fonction = 'trésorier' or fonction = 'secrétaire' or fonction = 'membre actif' or fonction = 'autre'),
    		primary key (numadh));
     
    Create table Activite (
    		numact numeric(4) NOT NULL,
    		typeact varchar(6),
    		depart varchar(10),
    		arrivee varchar(10),
    		datedebut date,
    		datefin date,
    		check (datefin > datedebut),
    		check (typeact = 'rallye' or typeact = 'sortie'),
    		primary key (numact));
     
    Create table Bateau (
    		numbat numeric(4) NOT NULL,
    		nom varchar(20),
    		taille numeric(4,2),
    		typebat varchar(20),
    		nbplaces numeric(2) NOT NULL,
    		check (taille > 0),
    		check (nbplaces > 5),
    		primary key (numbat));
     
    Create table Agence (
    		nomagence varchar(10) NOT NULL,
    		adresse varchar(40),
    		telephone varchar(10),
    		fax varchar(10),
    		primary key (nomagence));
     
    Create table Regate (
    		numregate numeric(2) NOT NULL,
    		numact numeric(4) NOT NULL,
    		forcevent numeric(2),
    		primary key (numregate, numact),
    		foreign key (numact) references Activite(numact));
     
    Create table Cotisation (
    		numadh numeric(4) NOT NULL,
    		anneecot numeric(4) NOT NULL,
    		montantpaye real,
    		check (anneecot >= Adherent.anneeadh),
    		primary key (numadh , anneecot),
    		foreign key (numadh) references Adherent(numadh));
     
    Create table Fournit (
    		numbat numeric(4) NOT NULL,
    		nomagence varchar(20) NOT NULL,
    		primary key (numbat , nomagence),
    		foreign key (numbat) references Bateau(numbat),
    		foreign key (nomagence) references Agence(nomagence));
     
    Create table Proprietaire (
    		numadh numeric(4) NOT NULL
    		numbat numeric(4) NOT NULL,
    		primary key (numadh),
    		foreign key (numadh) references Adherent(numadh),
    		foreign key (numbat) references Bateau(numbat));
     
    Create table ChefDeBord (
    		numchef numeric(4) NOT NULL,
    		numadh numeric(4) NOT NULL,
    		numact numeric(4) NOT NULL,
    		numbat numeric(4) NOT NULL,
    		primary key (numchef, numadh),
    		foreign key (numbat) references Bateau(numbat),
    		foreign key (numact) references Activite(numact),
    		foreign key (numadh) references Adherent(numadh));
     
    Create table Equipage (
    		numadh numeric(4) NOT NULL,
    		numact numeric(4) NOT NULL,
    		numchef numeric(4) NOT NULL,
    		numbat numeric(4) NOT NULL,
    		primary key (numadh , numact),
    		foreign key (numadh) references Adherent(numadh),
    		foreign key (numact) references Activite(numact),
    		foreign key (numchef) references ChefDeBord(numchef),
    		foreign key (numbat) references Bateau(numbat));
     
    Create table Resultat (
    		numbat numeric(4) NOT NULL,
    		numact numeric(4) NOT NULL,
    		numregate numeric(2) NOT NULL,
    		classement numeric(2) NOT NULL,
    		points numeric(4) NOT NULL,
    		primary key (numbat , numregate , classement),
    		foreign key (numbat) references Bateau(numbat),
    		foreign key (numact) references Activite(numact),
    		foreign key (numregate) references Regate(numregate));

    Voici maintenant le relevé des erreurs :

    psql:create.sql:13: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "adherent_pkey" for table "adherent"
    CREATE TABLE
    psql:create.sql:24: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "activite_pkey" for table "activite"
    CREATE TABLE
    psql:create.sql:34: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "bateau_pkey" for table "bateau"
    CREATE TABLE
    psql:create.sql:41: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "agence_pkey" for table "agence"
    CREATE TABLE
    psql:create.sql:48: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "regate_pkey" for table "regate"
    CREATE TABLE
    psql:create.sql:56: ERROR: missing FROM-clause entry for table "adherent"
    psql:create.sql:63: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "fournit_pkey" for table "fournit"
    CREATE TABLE
    psql:create.sql:70: ERROR: syntax error at or near "numbat"
    LINE 3: numbat numeric(4) NOT NULL,
    ^
    psql:create.sql:80: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "chefdebord_pkey" for table "chefdebord"
    CREATE TABLE
    psql:create.sql:91: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "equipage_pkey" for table "equipage"
    psql:create.sql:91: ERROR: there is no unique constraint matching given keys for referenced table "chefdebord"
    psql:create.sql:102: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "resultat_pkey" for table "resultat"
    psql:create.sql:102: ERROR: there is no unique constraint matching given keys for referenced table "regate"
    Merci beaucoup d'avance !
    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    il manque une virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Create table Proprietaire (
    numadh numeric(4) NOT NULL
    numbat numeric(4) NOT NULL,
    primary key (numadh),
    foreign key (numadh) references Adherent(numadh),
    foreign key (numbat) references Bateau(numbat));

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci ! J'ai trouvé aussi une de mes autres erreurs, me reste donc l'erreur a la ligne :
    psql:create.sql:56: ERROR: missing FROM-clause entry for table "adherent"
    Et autre question comment recupere t'on l'annee de la date actuelle ?
    Pour mon défault

    Merci d'avance !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    L'erreur est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    check (anneecot >= Adherent.anneeadh),
    Dans la création de la table Cotisation.

    Comme vous n'avez pas cité votre SGBDR, Il n'est pas possible de savoir s'il permet des contraintes CHECK ensembliste ou externe , mais de toute façon la syntaxe est mauvaise... Il faut drait au mieux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    check (EXISTS(anneecot >= SELECT anneeadh FROM Adherent AS A WHERE A.numadh = numadh))
    A +

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci de votre aide cependant cela me met

    psql:create.sql:104: ERROR: syntax error at or near "anneecot"
    LINE 6: check (EXISTS(anneecot >= SELECT anneeadh FROM Adherent AS...
    Merci d'avance !

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Nouveau problème en obstruant le check douteux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Create table Adherent (
    		numadh numeric(4) NOT NULL,
    		nom varchar(10) NOT NULL,
    		prenom varchar(10) NOT NULL,
    		adresse varchar(40),
    		telephone varchar(10),
    		skipper char (3) NOT NULL,
    		fonction varchar (15),
    		anneeadh numeric(4) DEFAULT extract(year from now()) ,
    		check (anneeadh between 1901 and 2100),
    		check (skipper = 'Oui' or skipper = 'Non'),
    		check (fonction = 'président' or fonction = 'vice-président' or fonction = 'trésorier' or fonction = 'secrétaire' or fonction = 'membre actif' or fonction = 'autre'),
    		primary key (numadh));
     
    Create table Activite (
    		numact numeric(4) NOT NULL,
    		typeact varchar(6) DEFAULT 'sortie',
    		depart varchar(10),
    		arrivee varchar(10),
    		datedebut date,
    		datefin date,
    		check (datefin >= datedebut),
    		check (typeact = 'rallye' or typeact = 'sortie'),
    		primary key (numact));
     
    Create table Bateau (
    		numbat numeric(4) NOT NULL,
    		nom varchar(20),
    		taille numeric(4,2),
    		typebat varchar(20),
    		nbplaces numeric(2) NOT NULL,
    		check (taille > 0),
    		check (nbplaces > 5),
    		primary key (numbat));
     
    Create table Agence (
    		nomagence varchar(10) NOT NULL,
    		adresse varchar(40),
    		telephone varchar(10),
    		fax varchar(10),
    		primary key (nomagence));
     
    Create table Regate (
    		numregate numeric(2) NOT NULL,
    		numact numeric(4) NOT NULL,
    		forcevent numeric(2),
    		primary key (numregate, numact),
    		foreign key (numact) references Activite(numact));
     
    Create table Cotisation (
    		numadh numeric(4) NOT NULL,
    		anneecot numeric(4),
    		montantpaye real,
    		paye char(3),
    		primary key (numadh , anneecot),
    		foreign key (numadh) references Adherent(numadh));
     
    Create table Fournit (
    		numbat numeric(4) NOT NULL,
    		nomagence varchar(20) NOT NULL,
    		primary key (numbat , nomagence),
    		foreign key (numbat) references Bateau(numbat),
    		foreign key (nomagence) references Agence(nomagence));
     
    Create table Proprietaire (
    		numadh numeric(4) NOT NULL,
    		numbat numeric(4) NOT NULL,
    		primary key (numadh),
    		foreign key (numadh) references Cotisation(numadh),
    		foreign key (numbat) references Fournit(numbat));
     
    Create table ChefDeBord (
    		numchef numeric(4) NOT NULL,
    		numadh numeric(4) NOT NULL,
    		numact numeric(4) NOT NULL,
    		numbat numeric(4) NOT NULL,
    		primary key (numchef, numadh),
    		foreign key (numbat) references Proprietaire(numbat),
    		foreign key (numact) references Regate(numact),
    		foreign key (numadh) references Proprietaire(numadh));
     
    Create table Equipage (
    		numadh numeric(4) NOT NULL,
    		numact numeric(4) NOT NULL,
    		numchef numeric(4) NOT NULL,
    		numbat numeric(4) NOT NULL,
    		primary key (numadh , numact),
    		foreign key (numadh) references ChefDeBord(numadh),
    		foreign key (numact) references ChefDeBord(numact),
    		foreign key (numchef) references ChefDeBord(numchef),
    		foreign key (numbat) references ChefDeBord(numbat));
     
    Create table Resultat (
    		numbat numeric(4) NOT NULL,
    		numact numeric(4) NOT NULL,
    		numregate numeric(2) NOT NULL,
    		classement numeric(2) NOT NULL,
    		points numeric(4) NOT NULL,
    		primary key (numbat , numregate , classement),
    		foreign key (numbat) references Equipage(numbat),
    		foreign key (numact) references Equipage(numact),
    		foreign key (numregate) references Regate(numregate));
    Et donc l'erreur

    basec207=> \i create.sql
    psql:create.sql:13: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "adherent_pkey" for table "adherent"
    CREATE TABLE
    psql:create.sql:24: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "activite_pkey" for table "activite"
    CREATE TABLE
    psql:create.sql:34: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "bateau_pkey" for table "bateau"
    CREATE TABLE
    psql:create.sql:41: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "agence_pkey" for table "agence"
    CREATE TABLE
    psql:create.sql:48: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "regate_pkey" for table "regate"
    CREATE TABLE
    psql:create.sql:56: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "cotisation_pkey" for table "cotisation"
    CREATE TABLE
    psql:create.sql:63: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "fournit_pkey" for table "fournit"
    CREATE TABLE
    psql:create.sql:70: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "proprietaire_pkey" for table "proprietaire"
    psql:create.sql:70: ERROR: there is no unique constraint matching given keys for referenced table "cotisation"
    psql:create.sql:80: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "chefdebord_pkey" for table "chefdebord"
    psql:create.sql:80: ERROR: relation "proprietaire" does not exist
    psql:create.sql:91: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "equipage_pkey" for table "equipage"
    psql:create.sql:91: ERROR: relation "chefdebord" does not exist
    psql:create.sql:102: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "resultat_pkey" for table "resultat"
    psql:create.sql:102: ERROR: relation "equipage" does not exist

    Sinon j'utilise Postgres.
    Merci d'avance de votre aide !

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 258
    Points : 12 927
    Points
    12 927
    Par défaut
    Bonjour,
    En dehors des erreurs SQL, je vois plusieurs erreurs dans le schéma:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE cotisation (
    numadh numeric(4),
    anneecot numeric(4),
    montant real,
    paye char(3),
    PRIMARY KEY (numadh), 
    FOREIGN KEY (numadh) references adherent(numadh)
    );
    Une seule cotisation par adhérent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE proprietaire(
    numadh numeric(4),
    numbat numeric(4),
    PRIMARY KEY (numadh), 
    FOREIGN KEY (numadh) references adherent(numadh),
    FOREIGN KEY (numbat) references bateau(numbat)
    );
    Un adhérent ne peut être propriétaire que d'un seul bateau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE agence(
    nomagence varchar(10),
    telephone varchar(10),
    fax varchar(10),
    adresse varchar(40),
    PRIMARY KEY (nomagence)
    );
    Pourquoi ne pas mettre une colonne Id, comme les autres tables ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE loueur(
    nomagence varchar(10),
    numbat numeric(4),
    PRIMARY KEY (numbat), 
    FOREIGN KEY (nomagence) references agence(nomagence), 
    FOREIGN KEY (numbat) references bateau(numbat)
    );
    Un bateau ne peut être loué qu'une seule fois ?

    Tatayo.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    La cotisation est une par année et par adhérent ainsi la clé primaire est numadh et anneecot.

    Oui un adherent ne peux être propriétaire que d'un seul bateau (c'est le sujet je pourrais le modifier par la suite)

    Il n'y a pas besoin d'id car les agences qui louent les bateaux ont forcément des noms différents d'ou nomagence qui est la clé primaire.

    Non un bateau peut être loué plusieurs fois ^^


    Je viens de voir que je me suis trompé de fichier j'édite mon précedent post !

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Une clef étrangère doit reposer sur une clef primaire ou une contrainte d'unicité dans la table de référence. D’où vos messages !

    psql:create.sql:70: ERROR: there is no unique constraint matching given keys for referenced table "cotisation"

    En effet dans la table "propriétaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Proprietaire (
    numadh numeric(4) NOT NULL,
    numbat numeric(4) NOT NULL,
    primary key (numadh),
    foreign key (numadh) references Cotisation(numadh)
    Vous voulez faire une contrainte d'intégrité référentielle vers la table "cotisation" sur une seule colonne (numadh) alors la clef primaire de "cotisation" c'est numadh + anneecot)

    De même pour les autres erreurs....

    Bref, si vous aviez modélisé sous forme conceptuelle en premier (ce qu'il faut toujours faire) aucune de ces erreurs grossières et imbéciles n'aurait été commises !
    Conclusion, apprenez la modélisation des données, mon site web, comme le livre de christian Soutou peuvent vous y aider...
    http://www.amazon.fr/ULM-pour-bases-...9703220&sr=1-7

    A +

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 258
    Points : 12 927
    Points
    12 927
    Par défaut
    Citation Envoyé par MrVhek Voir le message
    Il n'y a pas besoin d'id car les agences qui louent les bateaux ont forcément des noms différents d'ou nomagence qui est la clé primaire.
    Et le jour où une agence change de nom ?

    Tatayo.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponses j'ai compris mon erreur et maintenant je n'ai plus d'erreur dans mes tables.

    Sinon comment faire le check avec une donnée d'une autre table sans avoir de colonne a rajouter ?

    Sinon bonne idée, pour mon extension je vais proposer cela, car il est vrai qu'elle peut changer de nom.

    Merci d'avance !

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par MrVhek Voir le message
    Sinon comment faire le check avec une donnée d'une autre table sans avoir de colonne a rajouter ?
    La méthode la plus académique serait de créer un déclencheur sur les événements INSERT et UPDATE pour la table cotisation, et un déclencheur sur l'évenement UPDATE de la table adhérent, vérifiant la cohérence entre la date d'adhésion et la date des cotisations.

    Une alternative est de créer une fonction qui effectue cette vérification (pour un adhérent donné par exemple), et d'appeler cette fonction dans une contrainte CHECK sur les tables adhérent et cotisation

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci de votre aide j'ai pu terminer ma table !
    Bonne journée !

  14. #14
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 113
    Points : 31 588
    Points
    31 588
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par MrVhek Voir le message
    Il n'y a pas besoin d'id car les agences qui louent les bateaux ont forcément des noms différents d'ou nomagence qui est la clé primaire.
    Tatayo a évidemment raison, il est préférable qu’un identifiant (donc une clé primaire) soit un invariant. Qu’est-ce qui peut empêcher qu’une agence puisse changer de nom ? Qu’un jour deux agences aient le même nom ? Les règles de gestion ne sont pas figées pour l’éternité. Il suffit qu’un hurluberlu prenne un jour les rennes de l’entreprise et les chamboule...
    Je vous renvoie au principe de Tabourier.

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Pour compléter :
    Citation Envoyé par fsmrel Voir le message
    ... Qu’est-ce qui peut empêcher qu’une agence puisse changer de nom ? .... Il suffit qu’un hurluberlu prenne un jour les rennes de l’entreprise et les chamboule...
    Exemple : compagnie generale des eaux devenue VINCI, Veolia Environnement et Vivendi !

    Au fait, l'hurluberlu c'était pas Jean Marie Messier ??? ;-)

    A +

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

Discussions similaires

  1. PyGame, quelques questions sans réponses
    Par Ziranium dans le forum Programmation multimédia/Jeux
    Réponses: 6
    Dernier message: 27/04/2011, 19h33
  2. REquete sans erreur sql qui n'agit pas ........
    Par Skam dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/02/2005, 13h41
  3. requete SQL sans réponse
    Par kilian dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/08/2004, 09h36
  4. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

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