salut,
ton idée est bonne mais elle induit des doublons qui ne sont pas terrible (par exemple 3 tailles d'une même pizza va faire 3 fois les ingredients de la compos
pour respecter les formes normal (enfin les 3 premières du moins) il te faut 3 tables
-- table indiquant le prix en fonction de la taille :)
CREATE TABLE tailleTarif (
idtaille int unsigned NOT NULL auto_increment,
taille VARCHAR(30) NOT NULL,
prix int NOT NULL,
PRIMARY KEY (idtaille)
)engine=innodb;
CREATE TABLE pizzas (
id int unsigned NOT NULL auto_increment,
nom VARCHAR(30) NOT NULL,
ingredients text NOT NULL,
PRIMARY KEY (id)
)engine=innodb;
create table pizzaTaille (
idtaillepizza int unsigned not null auto_increment,
idpizza int unsigned not null,
idtaille int unsigned not null,
primary key(idtaillepizza),
index (idtaille),
foreign key (idtaille)
references tailleTarif(idtaille)
on update cascade on delete cascade
)engine=innodb;
Ainsi tu a :
- une table avec les tarifs suivant la taille
- une table avec les compos de la pizza
- une table qui lie les deux premières
le must serais de 5 tables :
CREATE TABLE tailleTarif (
idtaille int unsigned NOT NULL auto_increment,
taille VARCHAR(30) NOT NULL,
prix int NOT NULL,
PRIMARY KEY (idtaille)
)engine=innodb;
-- Les noms des pizzas
CREATE TABLE pizzas (
idpizza int unsigned NOT NULL auto_increment,
nom VARCHAR(30) NOT NULL,
PRIMARY KEY (idpizza),
)engine=innodb;
-- Association des pizza et des tailles (donc les tailles possibles pour une pizza)
create table pizzaTaille (
idtaillepizza int unsigned not null auto_increment,
idpizza int unsigned not null,
idtaille int unsigned not null,
primary key(idtaillepizza),
index (idtaille),
foreign key (idtaille)
references tailleTarif(idtaille)
on update cascade on delete cascade
)engine=innodb;
-- Les ingredients que l'on peux trouver dans une pizza
create table ingredients (
idingredient int unsigned not null auto_increment,
description text not null,
primary key(idingredient)
)engine=innodb;;
-- Les compos des pizza
create table composPizzas(
idcompo int unsigned not null auto_increment,
idpizza int unsigned not null auto_increment,
idingredient int unsigned not null,
primary key (idcompo),
index (idpizza),
foreign key (idpizza)
references pizza(idpizza),
index (idingredient),
foreign key (idingredient)
references ingredients(idingredient)
)engine=innodb;
Ceci bien sur ne tiens pas compte du fait que suivant les ingredients les prix des pizza ne seront pas forcément les mêmes (si tu met du saumon c'est pas le même prix que le jambon

).
Comment ça s'articule tous ça ?
c'est en fait simple :
- la table ingredients contient (une seul fois) tous les ingrédients de la cuisine (enfin ceux que l'on veux voir apparaitre sur la carte

)
- la table tailleTarif (ça c'est la même que la tienne) elle indique donc le tarif en fonction de la taille
- la table pizzas c'est pour avoir le nom et pourquoi pas la description un p'tit mot etc
- la table pizzaTaille c'est pour faire la liaison entre les trois premières tables,
- la tables composPizza permet d'indiquer la composition de la pizza
Pourquoi 5 tables ?
Simplement pour éviter de répéter plein de fois ma même chose (les ingrédients, les tarifs etc).
Un exemple tu 12 sortes de pizza, avec 3 prix différents pour chaque => 36 ref, tu décide de changer les prix (hausse quelconque) tu doit modifier les 36 tuples a la mano, avec les 5 tables (ou les 3) que trois tuples. les principes est le mêmes pour les ingrédients, ou les compositions (tu change la compo d'une pizza c'est 3 modif la une seule

)
plus d'info sur les clefs étrangères =>
la doc chez mysql la norme SQL sur le sujet
tu aura aussi besoin des
jointures
@+