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

Développement SQL Server Discussion :

Que signifie le caractère UQ__ lors de la création d'une table Sql Server ?


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut Que signifie le caractère UQ__ lors de la création d'une table Sql Server ?
    Bonjour à tous.

    J'ai un soucis dans la création des tables dans Sql Server Developper Edition 2017 et SSMS 18. Lorsque je crée une table, dans le dossier clés je vois ce symbole UQ__ suivi du préfixe du nom de la table et d'une suite d'autre caractères. Par Exemple avec la création d'une table tblUsers, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TABLE tblUsers
    	(
    		UserId NVARCHAR(20) UNIQUE NOT NULL,
    		UserName NVARCHAR(50) UNIQUE NOT NULL,
    		LoginName NVARCHAR(15) UNIQUE NOT NULL,
    		UserPassword NVARCHAR(15) NOT NULL,
    		UserStatut NVARCHAR(20) NOT NULL,
    		UserRegistDate DATETIME,
    		UserImage IMAGE,
    	);
    GO
    Une fois le script exécuté, j'ai deux sortes de clé dans le dossier clés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UQ__tblUsers__C9F28456EFE38E0A
    UQ__tblUsers__DB8464FF28007620
    Illustration
    Nom : CaptureSSMS.JPG
Affichages : 747
Taille : 13,8 Ko

    pourtant je n'ai crée aucune clé, et bien même que je le fais, j'ai le même problème.

    Quelqu'un peut-il m'expliquer ce que cela signifie svp ? et si cela à des conséquences sur le fonction de la base de donnée.

    Cordialement.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Lorsque tu fais un click droit sur UQ__tblUsers__C9F28456EFE38E0A et que tu choisis quelque chose comme generate create script, qu'est ce que ça te montre ?
    Je dirais qu'il s'agit de contrainte d'unicité, car tu as déclaré tes colonnes comme étant uniques mais tu n'as pas nommé la contrainte d'unicité, SQL server l'a fait pour toi avec un nom qui ne te convient pas.
    Cordialement
    Soazig

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Rebonjour,
    De plus vu le nombre de colonnes uniques dans ta table, tu ne devrais pas avoir de mal à définir une clé primaire, c'est toujours mieux.
    Cordialement
    Soazig

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    D'ailleurs le nom unique c'est assez peu vraisemblable
    Et aussi, le statut gagnerait à être une FK (integer donc) qui pointe vers une table des statuts dans laquelle on trouvera un code, un libellé et éventuellement des dates de début et de fin de validité.

  5. #5
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut
    Bonsoir

    Merci pour votre intervention.

    Bien vue pour le statut dans une table séparée, cela m'avait bien échappé !


    Cordialement.

  6. #6
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut
    Bonsoir.

    En effet, lorsque je supprime UNIQUE, la table se crée correctement et sans ces clés automatiques.
    Mais en spécifiant les champs uniques dans les tables cela ne devrait pas normalement causer ce genre
    de problème. Car lorsque je crée la table en mode graphique et avec les mêmes contraintes, il n'y pas
    de clé superflue qui se crée dans la table.

    Cordialement.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,

    Il te suffit de nommer tes contraintes, comme cela ce sera plus clair. Une idée de script je n'ai pas pu tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE tblUsers
    	(
    		UserId NVARCHAR(20) constraint UQ_tblUsersUserID UNIQUE NOT NULL,
    		UserName NVARCHAR(50) constraint UQ_tblUsersUserName UNIQUE NOT NULL,
    		LoginName NVARCHAR(15) constraint UQ_tblUsersLoginName UNIQUE NOT NULL,
    		UserPassword NVARCHAR(15) NOT NULL,
    		UserStatut NVARCHAR(20) NOT NULL,
    		UserRegistDate DATETIME,
    		UserImage IMAGE,
    	);
    GO
    Car lorsque je crée la table en mode graphique et avec les mêmes contraintes, il n'y pas
    de clé superflue qui se crée dans la table.
    As-tu regardé le script de creation de table généré et comparé avec le tien.
    Mais en spécifiant les champs uniques dans les tables cela ne devrait pas normalement causer ce genre
    de problème.
    En quoi est-ce un problème ? Ces colonnes sont uniques, ce sont donc des clés fonctionnelles.

    J'insiste tout de même sur la PK, ce n'est pas une invention inutile!
    Cordialement
    Soazig
    Cordialement

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Par contre, pour ce qui concerne la PK, évitez les colonnes de type (n)char ou pire (n)varchar peu propice aux performances et dont le contenu, le plus souvent fonctionnel, est par nature instable.
    Un attribut technique de type integer et attribué par le SGBD est ce qu'il y a de mieux comme PK : stable, concis et performant

  9. #9
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,

    Il te suffit de nommer tes contraintes, comme cela ce sera plus clair. Une idée de script je n'ai pas pu tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE tblUsers
    	(
    		UserId NVARCHAR(20) constraint UQ_tblUsersUserID UNIQUE NOT NULL,
    		UserName NVARCHAR(50) constraint UQ_tblUsersUserName UNIQUE NOT NULL,
    		LoginName NVARCHAR(15) constraint UQ_tblUsersLoginName UNIQUE NOT NULL,
    		UserPassword NVARCHAR(15) NOT NULL,
    		UserStatut NVARCHAR(20) NOT NULL,
    		UserRegistDate DATETIME,
    		UserImage IMAGE,
    	);
    GO
    As-tu regardé le script de creation de table généré et comparé avec le tien.
    En quoi est-ce un problème ? Ces colonnes sont uniques, ce sont donc des clés fonctionnelles.

    J'insiste tout de même sur la PK, ce n'est pas une invention inutile!
    Cordialement
    Soazig
    Cordialement
    Bonsoir.

    Merci pour ces explications, c'est bien claire pour mois et cela fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT NomContrainte UNIQUE
    est une contrainte pour SqlServer ce qui est tout à fait logique.
    J'ai crée la table en nommant le contrainte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT NomContrainte UNIQUE
    comme indiqué.

    Cordialement.

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Et toujours pas de PK de préférence portée par un attribut technique ?

  11. #11
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Et toujours pas de PK de préférence portée par un attribut technique ?
    Salut !

    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
     
    --Create Table Users
    CREATE TABLE tblUsers
    	(
    		UserId NVARCHAR(20) NOT NULL,
    		UserName NVARCHAR(50) CONSTRAINT UqUsername UNIQUE NOT NULL,
    		LoginName NVARCHAR(15) CONSTRAINT UqLoginName UNIQUE NOT NULL,
    		UserPassword NVARCHAR(15) NOT NULL,
    		FkUserStatut INT NOT NULL,
    		UserRegistDate DATETIME,
    		UserImage IMAGE,
    	);
    GO
    	ALTER TABLE tblUsers ADD CONSTRAINT PkUserId PRIMARY KEY CLUSTERED(UserId)
    	ALTER TABLE tblUsers ADD CONSTRAINT FkStatutId FOREIGN KEY(FkUserStatut) REFERENCES tblStatuts(StatutId) ON UPDATE CASCADE ON DELETE CASCADE
    J'ai simplement choisir de définir les contraintes de cette façon.

    Cordialement;

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Donc, vous avez bien défini une PK, mais celle-ci est de type NVARCHAR, c'est un très mauvais choix pour une PK !

  13. #13
    Membre régulier
    Homme Profil pro
    Logisticien
    Inscrit en
    Avril 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Logisticien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2016
    Messages : 70
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Donc, vous avez bien défini une PK, mais celle-ci est de type NVARCHAR, c'est un très mauvais choix pour une PK !
    Bonjour.

    Merci pour votre observation, il est tout à fait optimal de définir une PK de type INT et définir le Code Utilisateur à part. En fait ma PK a été définie en tant que NVARCHAR parce qu'il représente le code utilisateur qui n'est pas forcément numérique.

    Salutations;

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

Discussions similaires

  1. [MySQL] gestion des accents lors de la Création d'une table SQL a partir d'un fichiers DOS
    Par Invité dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/11/2016, 00h07
  2. Réponses: 0
    Dernier message: 09/10/2008, 08h02
  3. Réponses: 2
    Dernier message: 15/11/2007, 17h43
  4. Réponses: 8
    Dernier message: 06/06/2007, 17h03
  5. Réponses: 4
    Dernier message: 04/06/2007, 11h04

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