Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
781 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Oracle : ADD CONSTRAINT impossible

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Oracle : ADD CONSTRAINT impossible

n°1672936
Durst1805
Posté le 17-01-2008 à 18:44:09  profilanswer
 

Re-bonjour à tous, c'est encore le noob. Voilà après plusieurs recherche infructueuses je viens vous exposer le problème qui se pose à moi.
J'aimerais construire une contrainte d'unicité (unique) pour la colonne suivante, déclarée dans ma table Articles: Code,message d'erreur.
 
Designation VARCHAR2(255) UNIQUE;
 
et voici la contrainte que je tente d'intégrer à la table Articles:
 
alter table articles add constraint un_designation designation unique;
ERREUR à la ligne 1 :
ORA-02263: spécification du type de données obligatoire pour cette colonne

 
 
J'ai tout essayé: :??:  
 
alter table articles add constraint un_designation unique references articles(designation);
ERREUR à la ligne 1:
ORA-00906: parenthèse de gauche absente

 
alter table articles add constraint un_designation designation varchar2(255) unique;
ERREUR à la ligne 1 :
ORA-01430: la colonne ajoutée existe déjà dans la table

 
Comme je suis un noob je ne comprend pas ce qui manque a mon fragment de code. Pour info je suis a la lettre les indications d'un tutoriel (qui soit dit en passant a l'air érroné, mais très complet).
Svp je recquiert votre aide une nouvelle fois. Merci d'avance.
 
 
:pfff:

mood
Publicité
Posté le 17-01-2008 à 18:44:09  profilanswer
 

n°1673079
olivthill
Posté le 18-01-2008 à 00:35:04  profilanswer
 

Les contraintes sont des sources d'ennui.
Il vaut mieux coder la bonne cohérence des données lors des insertions en base par de la programmation traditionnelle.
Les clés primaires ont déjà la contrainte d'unicité, ce qui est suffisant habituellement.
Dans ma documentation, je lis que la syntaxe est :

CONSTRAINT constraint_name UNIQUE(column_name));

n°1673202
MagicBuzz
Posté le 18-01-2008 à 11:32:46  profilanswer
 

Tu peux éventuellement créer un index unique aussi :
 
create unique index uix_designation on <tatable>(designation)

n°1673287
leo++
Chef de file indienne
Posté le 18-01-2008 à 12:53:59  profilanswer
 

olivthill a écrit :

Les contraintes sont des sources d'ennui.
Il vaut mieux coder la bonne cohérence des données lors des insertions en base par de la programmation traditionnelle.
Les clés primaires ont déjà la contrainte d'unicité, ce qui est suffisant habituellement.
Dans ma documentation, je lis que la syntaxe est :

CONSTRAINT constraint_name UNIQUE(column_name));



 
L'interet des contraintes ce n'est pas de remplacer le code final, c'est de garantir une cohérence maximale de la base. Et si ton logiciel a un bug ou une faille, tu seras content d'avoir mis en place les bonnes contraintes aux bons endroits.
 
Ensuite il y a des regles à respecter pour poser des contraintes, afin d'évier que ca devienne un casse tete. Mais dans le cas d'une containte d'unicité, je vois pas le probleme.
 
durst> Tu ne serais pas en train de déclarer une clef primaire de ta table plutot ?
 

MagicBuzz a écrit :

Tu peux éventuellement créer un index unique aussi :
create unique index uix_designation on <tatable>(designation)


 
C'est très sale comme idée, je ne cautionne pas :o
En plus, si il s'agit d'une clef primaire, l'index est automatiquement créé par Oracle au bon moment et de manière transparente.

n°1673329
MagicBuzz
Posté le 18-01-2008 à 13:59:58  profilanswer
 

un index unique, c'est pas une clé primaire hein.
c'est ce qu'on appelle une clé alternative. certains SGBD comme Ingres disposaient d'ailleurs d'un synonyme pour unique index, nommé "alternate key" (et c'est 100% prévu dans la méthode MERISE)
et la notion de contrainte d'unicité et d'index unique sont équivalents, à la différence près que l'index unique permet en plus de la contrainte, d'effectuer des recherches rapides sur les valeurs :spamafote:
 
jusqu'à Oracle 8i, contrainte unique et clé unique étaient d'ailleurs synonymes, d'un point de vue mécanismes, c'était purement la même chose qui était effectuée (car pour vérifier l'unicité, c'est plus rapide si on se base sur un index de toute façon)
 
ps : et une clé primaire sur une désignation, ça me ferais mal quand même :o

Message cité 1 fois
Message édité par MagicBuzz le 18-01-2008 à 14:01:03
n°1673348
leo++
Chef de file indienne
Posté le 18-01-2008 à 14:29:24  profilanswer
 

MagicBuzz a écrit :

un index unique, c'est pas une clé primaire hein.
c'est ce qu'on appelle une clé alternative. certains SGBD comme Ingres disposaient d'ailleurs d'un synonyme pour unique index, nommé "alternate key" (et c'est 100% prévu dans la méthode MERISE)
et la notion de contrainte d'unicité et d'index unique sont équivalents, à la différence près que l'index unique permet en plus de la contrainte, d'effectuer des recherches rapides sur les valeurs :spamafote:


 
Donc en gros, tu proposes d'utiliser explicitement un index là ou on veut une simple contrainte d'unicité ?
 

MagicBuzz a écrit :

jusqu'à Oracle 8i, contrainte unique et clé unique étaient d'ailleurs synonymes, d'un point de vue mécanismes, c'était purement la même chose qui était effectuée (car pour vérifier l'unicité, c'est plus rapide si on se base sur un index de toute façon)
 
ps : et une clé primaire sur une désignation, ça me ferais mal quand même :o


 
Oui je viens de me rendre compte de la synonymie des deux expressions.
 
Par ailleurs, je ne vois pas le mal à déclarer une clef primaire sur une chaine de caracteres, c'est juste plus lourd à l'utilisation, mais das le cadre d'un tutoriel ca ne vaut peut etre pas encore la tete sur un simple probleme de performance (et je ne pense pas que ce soit un risque quelconque pour les habitudes). Et il vaut mieux une vraie clef primaire qu'une simple valeur unique qui en possède implicitement tous les attributs (ce que je ne sais pas, c'était une supposition).

n°1673369
MagicBuzz
Posté le 18-01-2008 à 14:50:24  profilanswer
 

vas-y putain il me gonfle ce forum à me bouffer mes postes :gun:
 
donc, je disais...
pour un pays, utiliser le code ISO sur deux lettres comme clé primaire, ou utiliser un code produit en varchar, comme clé primaire, ça ne me pose pas le moindre problème.
en effet, un pays change pas tous les jours de code, pas plus qu'un produit.
 
en revanche, une désignation, c'est fait pour changer (ne serait-ce que lorsqu'on se rend compte qu'on a fait une faute d'orthographe, ou qu'on a un second produit avec une description similaire et qu'on veut donc les différencier)
 
et dans ce cas, parcequ'une clé primaire, c'est quelquechose qui ne peut par essence pas changer, ça me pose effectivement un problème majeur d'utiliser une description comme clé primaire.
 
en revanche, une contrainte d'unicité/index unique, sur une description, cela ne me pose pas le moindre problème : on peut effectivement imposer à l'utilisateur de ne jamais saisir deux descriptions identiques, histoire de s'y retrouver dans le catalogue.

n°1673531
Durst1805
Posté le 18-01-2008 à 17:58:50  profilanswer
 

Merci pour toutes vos réponses. En effet comme tu l'as dit Olive une seule contrainte d'unicité suffisait, en réalité j'essayer d'appliquer les exemples du tuto que je lisais à la suite, mais en fait les exemple n'avaient aucuns liens entre eux, c'est pour cela que ma commande ne fonctionnait pas. Merci en tout cas a vous tous.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Oracle : ADD CONSTRAINT impossible

 

Sujets relatifs
Impossible de supprimé une tableAccéder à une base Oracle sans passer par ODBC?
[RESOLU][Oracle - SQL] Problème parsing xml[Oracle] et batchs...
impossible de me connecter à une base MySQL[RESOLU] PB connexion BD Oracle a cause de l'URL
Programme impossible ?oracle et programmation
ORACLE: ORA-00371: not enough shared pool memory, should be atleast 62Problème installation Oracle 10g sous Windows Vista
Plus de sujets relatifs à : Oracle : ADD CONSTRAINT impossible


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR