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 :

Création d'une contrainte


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2023
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 38
    Par défaut Création d'une contrainte
    Bonjour

    J'aimerais avoir quelques explications sur un résultat d'extraction d'une base de donnée sql server
    J'ai une extraction d'une table qui s'appelle contact où j'ai entre autres les colonnes "Nom","Prénom" dans lesquelles j'ai des chiffres tels que des numéros de téléphones

    Je voulais savoir s'il serait recommandable de créer la contrainte suivante sur ces deux colonnes afin d'empêcher l'insertion de chiffres qui à mon sens n'ont rien à faire dans ce type de colonnes

    ALTER TABLE Contact ADD CONSTRAINT Contact_Nom CHECK (ContactNom REGEXP '^[A-Z]+$')

    Quels sont les impacts d'un tel ajout ?


    En vous remerciant

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    salut, d'abord c'est mon avis, et ce n'est que mon avis et rien d'autre.

    Cela dépend évidemment du contexte et des données, mais de manière générale, je suis, personnellement, assez défavorable à mettre des contraintes dans des champs type Nom ou Prénom. On ne sait pas ce que, à l'avenir, on aura besoin d'y saisir.

    Alors, oui, dans une table Contact, on s'attend à y avoir le nom et le prénom d'une personne, et effectivement, il ne me vient pas de cas en mémoire ou ces infos pouvaient comporter un nombre. Par contre des caractère autre que des lettres, oui, à commencer par l’apostrophe, l'espace, le tiret pour le noms composés...

    Cependant, j'ai manipulé suffisamment de base de données pour savoir par expérience, que l'on peut parfois y trouver, non pas le nom d'une personne, mais le nom d'un organisme. Ou alors, le nom de la personne est combiné avec le nom de l'organisme. Et dans une raison sociale, il peut y avoir des nombres, ou tout autre caractères.

    Sauf réelles contraintes métier, pour moi, ces champs-là restent de la saisie libre, et même avec une taille relativement importante. Là où, il y a encore quelques années, je pouvais limiter la taille de ces champs à une vingtaine de caractères, j'hésite de moins en moins, maintenant, à monter à 50, voire 100 caractères. Des noms/prénoms composés ou des combinaisons de noms, ça peut très vite devenir long.

    Mais, encore une fois, ce n'est que mon avis. Tout dépend le contexte et les données.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2023
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 38
    Par défaut
    Bonjour

    Par contre des caractère autre que des lettres, oui, à commencer par l’apostrophe, l'espace, le tiret pour le noms composés...
    Bien vu je n'y ai pas pensé

    Merci pour ta réponse , il faut en effet aller plus loin dans la réfléxion

    Bonne année !

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 637
    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 637
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Citation Envoyé par sevyc64 Voir le message
    j'hésite de moins en moins, maintenant, à monter à 50, voire 100 caractères. Des noms/prénoms composés ou des combinaisons de noms, ça peut très vite devenir long.

    D'après Wikipédia, le prénom indien le plus long serait Rhoshandiatelly-neshiaunnveshenk Koyaanfsquatsiuty (entrez tous, et que le dernier ferme la porte ), soit 50 caractères tout de même .

    Dans un contexte international, il convient de prévoir large.
    Cela dit, il ne faut pas stocker plusieurs prénoms dans la même colonne, sauf s'il s'agit d'un prénom composé comme "Jean-Marc".
    Si l'on a besoin de stocker plusieurs prénoms non composés, il faut une colonne pour le prénom d'usage, une autre pour le deuxième prénom et une autre pour le troisième.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Cela dit, il ne faut pas stocker plusieurs prénoms dans la même colonne, sauf s'il s'agit d'un prénom composé comme "Jean-Marc".
    Stocker plusieurs prénoms n'est réellement utile que lorsqu'on a besoin de l'Etat Civil complet de la personne.
    La plupart du temps, les noms/prenoms d'usage suffisent.
    Mais il n'est pas si rare que ça de rencontrer des personnes qui se font appeler par plusieurs de leur prénom, sans que ce soit pour autant un prénom composé. Et l'utilisateur d'un logiciel, face à ce genre de personne, ne connaissant pas le détail, inscrira les prénoms bien souvent comme un seul prénom composé.

    Citation Envoyé par escartefigue Voir le message
    Si l'on a besoin de stocker plusieurs prénoms non composés, il faut une colonne pour le prénom d'usage, une autre pour le deuxième prénom et une autre pour le troisième.
    Généralement, on prévoie prénom1, prénom2, prénom3, ... prénom d'usage, ou de pouvoir indiquer lequel des prénoms est le prénom d'usage, car celui-ci n'est pas obligatoirement le premier au sens Etat Civil. Il est même parfois admis (mais je ne connais pas les conditions) que le prénom d'usage n'est pas un des prénoms officiel, mais un diminutif commun de l'un d'eux.

  6. #6
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 218
    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 218
    Billets dans le blog
    16
    Par défaut
    Hello !

    Je mets mon grain de sel...

    Evidemment, sauf à s’appeler 007, des chiffres dans un nom ça n’est pas bien normal.
    Avant d’envisager la mise en oeuvre d’une contrainte qui me fait penser à un pansement sur une jambe bois, il me paraît préférable d’aborder le sujet d’une autre façon, à savoir auditer les tables parties prenantes dans cette affaire.

    Si la table CONTACT contient des données sensibles telles qu’un SIREN, un SIRET et autres, il faudra envisager d’approfondir en fonction des relations entretenues de CONTACT avec d’autres tables (commandes, factures, etc.)

    Une fois l’audit effectué, si par exemple pour telles lignes de la table CONTACT il n’y a pas de données sensibles, pourquoi ne pas purger ? En tout cas, discuter des résultats de l’audit avec qui de droit.

    Sans aller jusqu’à la recommandation de Napoléon : on tire d’abord, on discute ensuite.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Pour SQL Server il y a beaucoup plus simple et beaucoup plus efficace qu'une expression régulière grâce au LIKE avancé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE T_PERSONNE_PRS 
       ADD CONSTRAINT CK_PRS_NOM 
          CHECK (PRS_NOM COLLATE French_CI_AI LIKE CONCAT('[A-Z]', REPLICATE('[A-Z'' -]', LEN(PRS_NOM) - 2), '[A-Z]'));
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [C#] [ADO.NET] Récupérer une contrainte de vérification
    Par crjo dans le forum Accès aux données
    Réponses: 3
    Dernier message: 13/04/2005, 17h30
  2. [DEBUTANT] Qu'est-ce qu'une contrainte applicative ?
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2005, 14h18
  3. [SYBASE ASE] Rajouter une contrainte null sur une colonne
    Par Little_Goldo dans le forum Sybase
    Réponses: 1
    Dernier message: 09/02/2005, 10h48
  4. [Interbase] Mettre une contrainte sur un champ
    Par mika dans le forum InterBase
    Réponses: 2
    Dernier message: 26/01/2005, 14h04
  5. [ contrainte ] supprimer une contrainte DB2
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 08/01/2004, 15h01

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