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

MS SQL Server Discussion :

Problème dans la création d'une table


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut Problème dans la création d'une table
    Bonjour
    Je veux traduire ce MLD en MPD en utlisant sql server :
    – film (num_film, num_realisateur, titre, genre, annee)
    – cinema (num_cinema, nom, adresse)
    – individu (num_individu, nom ,prénom)
    – jouer (num_individu, num_film, role)
    – projection (num_cinema, num_film, jour)

    J'ai bien créé les trois premières tables. Les problèmes commencent à partir de la 4ème.

    J'ai essayé avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE JOUER (
    role_joue   VARCHAR(20) NOT NULL ,
    num_individu INTEGER FOREIGN KEY REFERENCES INDIVIDU(num_individu) ,
    num_film  INTEGER FOREIGN KEY REFERENCES FILM(num_film) ,
    )
    Mais il me donne cette erreur :
    Msg 1767, Level 16, State 0, Line 1
    Foreign key 'FK__JOUER__num_film__164452B1' references invalid table 'FILM'.
    Msg 1750, Level 16, State 0, Line 1
    Could not create constraint. See previous errors.
    J'ai une question : comment introduire le jour dans la table projection
    merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Il y a probablement un erreur dans le nom de la table, ou alors la table FILM n'a pas été créée dans la même database

    Je ne comprends pas votre question "comment introduire le jour..."

    Et une remarque : évitez les caractères spéciaux (accents, cédilles, etc...) dans les noms d'objets, prénom par exemple doit être remplacé par prenom

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut
    Dans la table projection (num_cinema, num_film, jour) il y a le jour. Comment je peux l'ajouter même s'il n’existe dans aucun table précédente ?
    – film (num_film, num_realisateur, titre, genre, annee)
    – cinema (num_cinema, nom, adresse)
    – individu (num_individu, nom prénom)
    – jouer (num_individu, num_film, role)

    Concernant les noms du tables :
    Nom : ffffffff.png
Affichages : 2868
Taille : 24,0 Ko

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Citation Envoyé par HAM_10 Voir le message
    Bonjour
    ...
    – film (num_film, num_realisateur, titre, genre, annee)
    – cinema (num_cinema, nom, adresse)
    – individu (num_individu, nom ,prénom)
    – jouer (num_individu, num_film, role)
    – projection (num_cinema, num_film, jour)

    J'ai bien créé les trois premières tables. Les problèmes commencent à partir de la 4ème.

    J'ai essayé avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE JOUER (
    role_joue   VARCHAR(20) NOT NULL ,
    num_individu INTEGER FOREIGN KEY REFERENCES INDIVIDU(num_individu) ,
    num_film  INTEGER FOREIGN KEY REFERENCES FILM(num_film) ,
    )
    ...
    Il est bon de remarquer que les noms de tables diffèrent. Dans la Base de Données, c'est FILME, dans le code c'est FILM. Corrigez l'erreur.

    Concernant l'insertion dans la table projection (num_cinema, num_film, jour), d'abord je recommenderai d'y ajouter un identifiant de préférence de type INT autoincrémént.
    Votre table sera ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    projection (Id,num_cinema, num_film, jour).
    La colonne jour de type Date

    Ensuite la requête d'insertion sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO projection (id,num_cinema, num_film, jour) VALUES (ValeurNumCinema,ValeurNumFilm,'20170131')
    pour la date du jour.
    Il est préférable d'entrer les valeurs de dates en concaténant les valeurs années, mois et jour comple dans l'exemple.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Rien ne vous empêche de créer une table des jours.
    C'est d'ailleurs fort utile lorsqu'on doit réaliser des agrégats sur les dates, par exemple par trimestres, ou sur les douze derniers mois lorsque les exercices comptables ne sont pas alignés sur l'année calendaire.

    Voici donc un exemple de script sur la base de votre modèle :

    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
    CREATE TABLE film
    (
    	num_film int NOT NULL IDENTITY
    		CONSTRAINT PK_film PRIMARY KEY
    	, num_realisateur int NOT NULL
    		-- CONSTRAINT FK_film__num_realisateur FOREIGN KEY (num_realisateur) REFERENCES dbo.realisateur
    	, titre nvarchar(150) NOT NULL
    	, genre int NOT NULL
    		-- CONSTRAINT FK_film__genre FOREIGN KEY(genre) REFERENCES dbo.genre ?
    	, annee smallint NOT NULL
    		CONSTRAINT CHK_film__annee CHECK (annee > 1900 AND annee < 2100)
    )
    GO
     
    CREATE TABLE cinema
    (
    	num_cinema int NOT NULL
    		CONSTRAINT PK_cinema PRIMARY KEY
    	, nom varchar(64) NOT NULL
    	, adresse varchar(256) NOT NULL
    )
    GO
     
    CREATE TABLE individu
    (
    	num_individu int NOT NULL
    		CONSTRAINT PK_individu PRIMARY KEY
    	, nom varchar(50) NOT NULL
    	, prenom varchar(50) NOT NULL
    )
    GO
     
    CREATE TABLE jouer
    (
    	num_jouer int NOT NULL IDENTITY
    		CONSTRAINT PK_jouer PRIMARY KEY
    	, num_individu int NOT NULL
    		CONSTRAINT FK_jouer__num_individu FOREIGN KEY(num_individu) REFERENCES dbo.individu
    	, num_film int NOT NULL
    		CONSTRAINT FK_jouer__num_film FOREIGN KEY(num_film) REFERENCES dbo.film
    	, role varchar(512)
    	, CONSTRAINT UQ_jouer__num_individu__num_film UNIQUE (num_individu, num_film)
    )
    GO
     
    CREATE TABLE jour
    (
    	jour date NOT NULL
    		CONSTRAINT PK_jour PRIMARY KEY
    )
    GO
     
    CREATE TABLE projection
    (
    	num_projection int NOT NULL
    		CONSTRAINT PK_projection PRIMARY KEY
    	, num_cinema int NOT NULL
    		CONSTRAINT FK_projection__num_cinema FOREIGN KEY(num_cinema) REFERENCES dbo.cinema
    	, num_film int NOT NULL
    		CONSTRAINT FK_projection__num_film FOREIGN KEY(num_film) REFERENCES dbo.film
    	, jour date NOT NULL
    		CONSTRAINT FK_projection__jour FOREIGN KEY(jour) REFERENCES dbo.jour
    	, CONSTRAINT UQ_projection__num_cinema__num_film__jour UNIQUE (num_cinema, num_film, jour)
    )
    Et pour peupler la table :

    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
    WITH
    	N AS (SELECT NULL AS v UNION ALL SELECT NULL )
    	, N0 AS (SELECT A.v FROM N AS A CROSS JOIN N AS B)
    	, N1 AS (SELECT A.v FROM N0 AS A CROSS JOIN N0 AS B)
    	, N2 AS (SELECT A.v FROM N1 AS A CROSS JOIN N1 AS B)
    	, N3 AS (SELECT A.v FROM N2 AS A CROSS JOIN N2 AS B)
    	, RN AS
    	(
    		SELECT	ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) - 1 AS rn
    		FROM	N3
    	)
    INSERT	INTO dbo.jour
    (
    	jour
    )
    SELECT	DATEADD(day, rn, CAST('19000101' AS date)) AS la_date
    FROM	RN
    WHERE	rn <= DATEDIFF(day, '19000101', '20500101')
    ORDER	BY rn
    Vous pouvez ensuite ajouter des colonnes calculées persistées pour extraire automatiquement l'année, le trimestre, le mois, la semaine, le jour de la semaine, le jour de l'année, ...
    Ainsi les requêtes sur les dates que j'ai évoquées plus haut sont d'une expression redoutablement simple, et en plus elles sont performantes ... A condition d'avoir les index adéquats : comme c'est une table qui ne sera quasiment jamais écrite, on peut la sur-indexer à l'envi

    @++

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

Discussions similaires

  1. problème lié à la création d'une table
    Par Rajasthan dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/09/2008, 17h02
  2. problème dans la création d'une requête
    Par LeCogiteur dans le forum Langage SQL
    Réponses: 0
    Dernier message: 25/02/2008, 00h43
  3. Réponses: 2
    Dernier message: 10/12/2007, 18h47
  4. SVP Probleme dans la création d'une table
    Par sephirothmana dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/11/2006, 17h12
  5. Contrainte de date dans la création d'une table
    Par snoopy69 dans le forum Administration
    Réponses: 1
    Dernier message: 21/11/2006, 10h16

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