Contrainte bizarre

arpala Messages postés 3 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009 - 16 janv. 2009 à 15:49
arpala Messages postés 3 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009 - 21 janv. 2009 à 10:25
Bonjour à tous,

Alors voila, pour m'entrainer je m'amuse à créer des tables dans une base de donnée.

Mais la je tombe sur un os.

Primo mon fichier texte de création de table est:
create table type(
   numero varchar(4),
   notype varchar(6),
   libelle varchar(12),
   constraint pk_type primary key (numero,notype));

create table zoneactivite (
   numero varchar(4),
   nom varchar(30),
   nozoneact varchar(8),
   secteur varchar(20),
   nomville varchar(25),
   surftotale varchar(8),
   surfdispoamenagee varchar(16),
   surfdisponue varchar(24),
   prixm2 varchar(8),
   constraint pk_nume primary key (numero,nozoneact));

create table entreprise (
   numero varchar(4),
   nooccupant varchar(8),
   raisonsoc varchar(16),
   descact varchar(16),
   rue varchar(16),
   cp varchar(4),
   ville varchar(16),
   tel varchar(16),
   mel varchar(16),
   siteweb varchar(16),
   constraint pk_entreprise primary key (numero,nooccupant));

create table local (
   numero varchar(4),
   dateactu varchar(8),
   description varchar(36),
   superficie varchar(16),
   location varchar(16),
   prix varchar(10),
   nozoneact varchar(16),
   notype varchar(16),
   nooccupant varchar(16),
   constraint pk_local primary key (numero),/jusque la c'est juste, l'erreur se trouve dans les 3 dernieres lignes.
   constraint fk_zoneact foreign key (nozoneact) references zoneactivite(nozoneact),
   constraint fk_noty foreign key (notype) references type(notype),
   constraint fk_nouc foreign key (nooccupant) references entreprise(nooccupant));

pas très complique pour la plupart d'entre vous, mais voila quand je vais sur phpmyadmin je copie colle tout sa et  paf la table local a une erreur mais les autres sont créer.

Mon erreur est:
#1005 - Can't create table '.\bonne\local.frm' (errno: 150)

sur plusieurs forum ils disent que sa vient des contraintes mais moi je ne trouve pas d'erreur, si quelqu'un pouvait m'aider se serait sympa.

Merci d'avance à bientôt

4 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
17 janv. 2009 à 01:03
Essaye de t'arranger pour que tes clés soient exactement de même type et longueur. Par exemple

zoneactivite.nozoneact est un varchar(8) et
local.nozoneact est un varchar(16)

Il se peut que MySql ne supporte pas ce genre de chose.

ed73
0
arpala Messages postés 3 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
17 janv. 2009 à 12:02
Salut ed73, effectivement y avait sa qui gêner, mais ça me fait toujours le même message d'erreur

arpala
0
SQLpro Messages postés 35 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 8 février 2012 1
20 janv. 2009 à 23:55
Une contrainte FOREIGN KEY se greffe sur une autre contrainte de type PRIMARY KEY ou UNIQUE de la table mère.
Dans la définition de la contrainte FK_zoneact de votre table local, vous tentez d'utiliser la seule colonne zoneact qui ne correpond pas à la définition de contrainte PK (ou UNIQUE s'il en existait une) de la table zoneactivite que vous voulez référencer... C'est donc à juste titre que votre SGBDR râle !
Visiblement vous n'avez pas compris ce qu'est un modèle relationnel de données.
Une clef étrangère est en fait un ensemble de colonnes qui se trouve être clef primaire ou contrainte d'unicité d'une autre table. C'est aussi simple que cela.
Il me semble que votre modèle est furieusement bancal...
Il serait souhaitable que vous utilisiez un outil de modélisationa afin de faire ce travail. Cela vous éviterais de longues journées stériles et donc constituerais une économie drastique pour votre entreprise !

A +

Frédéric BROUARD - SQLpro - MVP SQL Server
Spécialiste SQL, SGBDR, modéles de données
SQL & SGBDR  http://sqlpro.developpez.com/
0
arpala Messages postés 3 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
21 janv. 2009 à 10:25
Salut c'est bon j'ai trouvé mon erreur sans connaitre les modèles relationnels de données et sans logiciel.
Il fallait juste que dans mes contraintes j'enleve nozoneact, notype, nooccupant, et que je remplace ces 3 par numero et voila.

create table type(
   numero varchar(4),
   notype varchar(6),
   libelle varchar(12),
   constraint pk_type primary key (numero,notype));

create table zoneactivite (
   numero varchar(4),
   nom varchar(30),
   nozoneact varchar(8),
   secteur varchar(20),
   nomville varchar(25),
   surftotale varchar(8),
   surfdispoamenagee varchar(16),
   surfdisponue varchar(24),
   prixm2 varchar(8),
   constraint pk_nume primary key (numero,nozoneact));

create table entreprise (
   numero varchar(4),
   nooccupant varchar(8),
   raisonsoc varchar(16),
   descact varchar(16),
   rue varchar(16),
   cp varchar(4),
   ville varchar(16),
   tel varchar(16),
   mel varchar(16),
   siteweb varchar(16),
   constraint pk_entreprise primary key (numero,nooccupant));

create table local (
   numero varchar(4),
   dateactu varchar(8),
   description varchar(36),
   superficie varchar(16),
   location varchar(16),
   prix varchar(10),
   nozoneact varchar(8),
   notype varchar(16),
   nooccupant varchar(16),
   constraint pk_local primary key (numero),
   constraint fk_zoneact foreign key (nozoneact) references zoneactivite(numero),
   constraint fk_noty foreign key (notype) references type(numero),
   constraint fk_nouc foreign key (nooccupant) references entreprise(numero));
0