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

PowerAMC Discussion :

Int unsigned MCD/MPD


Sujet :

PowerAMC

  1. #1
    Membre à l'essai
    Homme Profil pro
    Manager des systèmes d'information
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Manager des systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Points : 14
    Points
    14
    Par défaut Int unsigned MCD/MPD
    Bonjour,

    J'aimerais savoir comment on précise qu'un entier (ou autre décimal/chiffre) est non signé.
    Je n'ai pas trouvé de case à cocher, apparemment ça fait partie des propriétés étendues mais je n'ai pas trouvé la mise en application.

    Je vous remercie.

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 006
    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 006
    Points : 30 938
    Points
    30 938
    Billets dans le blog
    16
    Par défaut
    Bonsoir vadorequest,


    On applique le même principe que la dernière fois !




    On clique sur « Contrôles standards » :




    On saisit la valeur minimum :




    C’est propagé jusqu’à la génération du code SQL (contrainte CKC_Artqtestock_Article) :


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE ARTICLE (
           ArticleId            Int                  Not null,
           TvaId                Int                  Not null,
           ArtReference         Varchar(64)          Not null,
           ArtDesignation       Varchar(64)          Not null,
           ArtPrixHt            Int                  Not null,
           ArtQteStock          Int                  Not null,
        CONSTRAINT ARTICLE_PK PRIMARY KEY (ArticleId),
        CONSTRAINT CKC_Artqtestock_Article CHECK (ArtQteStock >= 0)
    ) ;

    Et voilà le travail. Est-ce bien ce que vous souhaitiez ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Manager des systèmes d'information
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Manager des systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Points : 14
    Points
    14
    Par défaut
    Encore une fois, je m'attendais à une case à cocher.

    Par contre, j'ai l'impression que dans ce cas, ça génère un Int (non un unsigned int) et que ça rajoute une contrainte de type check.

    Mais est-ce que ça va pouvoir dépasser la limite d'un int ? Il me semble que c'est deux choses différentes que de changer le type et rajouter un check.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 006
    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 006
    Points : 30 938
    Points
    30 938
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par vadorequest Voir le message
    j'ai l'impression que dans ce cas, ça génère un Int (non un unsigned int) et que ça rajoute une contrainte de type check
    C’est plus qu’une impression, c’est bien une réalité. C’est une façon de s’assurer qu’une colonne prend pour valeur un entier non négatif.

    La norme SQL (disons SQL:1999) prévoit qu’un INTEGER soit dans la plage -2^31 (-2 147 483 648) à 2^31-1 (2 147 483 647), point barre. Aujourd'hui, avec les types de base SQL, vous ne pouvez pas déclarer un entier non signé, contrairement à ce que permet un langage de programmation tel que C.

    Maintenant, rien ne vous empêche de définir vos propres types. Toutefois, dans le contexte d’un MCD PowerAMC, ça partira sur la base de la définition d’un domaine (Modèle > Domaines), mais là encore le type généré sera d’une façon ou d’une autre affublé d’une contrainte, selon un mode opératoire propre à votre SGBD. Exemple avec SQL Server, dans lequel le type IntPerso est en réalité un sous-type du type INTEGER qu’on a muni d’une contrainte (rule) interdisant les valeurs négatives, faisant donc que la plage des valeurs sera comprise entre 0 et 2 147 483 647.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE RULE R_IntPerso AS @column >= 0
    GO 
    CREATE TYPE IntPerso FROM INT
    GO
    EXECUTE sp_bindrule R_IntPerso, IntPerso
    GO
    CREATE TABLE ARTICLE (
           ArticleId            INT                  NOT NULL,
           ...                  ...                  ...
           ArtQteStock          IntPerso             NOT NULL,
    
        CONSTRAINT ARTICLE_PK PRIMARY KEY (ArticleId)
    ) ;
    Si vous voulez une valeur supérieure à 2 147 483 647, vous pouvez — si votre SGBD vous le permet — utiliser le type BIGINT repoussant la valeur maximum à 2^63-1 (9 223 372 036 854 775 807), ce qui en euros représente déjà une belle somme .
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Manager des systèmes d'information
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Manager des systèmes d'information

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Points : 14
    Points
    14
    Par défaut
    En fait j'en étais sûr, mais j'ai préféré prendre des gants :p

    Je pensais que le SGBD gérait les valeurs non signées par contre, il m'est inutile d'avoir une contrainte check supplémentaire pour une valeur auto_increment (ID), à part ralentir l'insertion ça n'arrivera jamais.

    Merci de ton aide !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/10/2007, 11h44
  2. int, unsigned int, et la fonction pow
    Par salseropom dans le forum C
    Réponses: 11
    Dernier message: 22/12/2006, 17h53
  3. int, unsigned char ou bool ?
    Par BNS dans le forum C++
    Réponses: 10
    Dernier message: 21/06/2006, 21h59
  4. [Modelisation] Existe-t-il des freeware pour mcd/mpd?
    Par dinozor29 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/03/2006, 11h18
  5. Probleme de cardinalité dans mon mcd/mpd
    Par bluecurve dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/03/2006, 08h12

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