résolu - reflexion sur un id general

Eléphanteau du PHP | 44 Messages

06 déc. 2011, 18:44

hello!
j'ai une base de données mysql qui contient plusieurs tables par famille de produits.
Or, j'ai besoin, quand je crée un produit, de générer pour celui ci un id qui sera unique toutes tables confondues.

J'ai dans la tête de créer une table d'id, et quand j'ajoute un produit:
1)j'incrémente ma table id de 1
2) je donne à mon produit le dernier id de cette table +1

Mais je me demandais s'il n'y aurait pas plus optimiser pour ce que je veux faire?

Merci à vous et bonne fin de journée! :wink:
Modifié en dernier par macplus le 07 déc. 2011, 16:12, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2011, 09:12

Salut,

Je ne vois pas exactement où tu veux en venir mais partant du principe que dans une base relationnelle les données doivent être atomique tu peux très bien avoir un champ "id" dans la table produits qui sera auto incrémenté. Ensuite tu propage cette valeur pour faire référence aux produits.

Il y a plusieurs façon de faire.
Pour mysql utilise directement "auto_increment" sur la déclaration du champ (par exemple id int auto_increment not null primary key)
Pour oracle ou postgresql il faut une séquence et un trigger

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 44 Messages

07 déc. 2011, 10:08

Hello!
Effectivement, j'ai du mal m'exprimer.
Pour cet id, pas de souci.
Ce que je cherche à faire, c'est créer un id "toutes tables confondues" pour identifier un produit quelque soit sa "famille", donc sa table.
exemple:
table A:
-produit A1
-produit A2
-produit A3

Table B:
-Produit B1
-Produit B2

Je cherche à faire:
Table A:
-Produit A1 => id=1
-produit A2 => id=2
-produit A3 => id=3

Table B:
-Produit B1 => id=4
-produit B2 => id=5


où l'id s'incrémente au fur et à mesure des ajouts d'un produit quelle que soit sa table.

Merci à toi

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2011, 10:28

pourquoi deux tables produits ?

ça ressemble à un défaut de conception ton affaire la nan ?

si non une séquence, mais a priori mysql n'implemente pas.

y a un exemple la http://www.sqlfr.com/codes/MYSQL-FONCTI ... 45299.aspx


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 44 Messages

07 déc. 2011, 13:18

pourqoi un defaut de conception?

En fait chaque famille de produit est susceptible de contenir des 100aines de références avec des caractéristiques très différentes et d'être appelées en php dans des conditions très différentes aussi.
Malgré tout, j'ai besoin d'une identification unique pourchaque produit indépendament de sa famille.

Mais je reste ouvert a tes suggestions.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2011, 15:45

ben faut voir ce que tu entend pas caractèristique différentes.

parce que bon un produit (que ce soit un lave vaisselle, une tondeuse à gazon, ou du PQ) a la base c'est un nom, une description et une référence (qui est normalement unique ce qui peux en faire une clef primaire).

Après faut voir ce que tu compte faire des caractéristiques.
sinon avec ce que tu me dit au moins deux tables
une table catégories (ou familles)
une table produits.

si c'est qu'informatif c'est suffisant.

de toute façon tu ne va pas faire une table de plus dès qu'un produit présente un truc différent d'un autre ?

au pire tu peux utiliser d'autre table pour gérer cela.
Par exemple
une table qui décrit les caractéristique (couleur, hauteur, largeur etc )
et une qui fait le lien ente produits et caract.
create table familles (
	idfamille int not null primary key,
	nom varchar(20) not null 
);
create table produits (
	idproduit int not null primary key,
	idfamille int not null
	code varchar(10) not null,
	nom varchar(50),
	description varchar(200)
);

create table caracterisques
	idcaracteristique int not null primary key, 
	nom varchar(20) not null,
);

create table caracproduit (
	id int not null primary key, 
	idproduit int not null,
	idcaracteristique int not null
);
Avec ça tu peux gérer un nombre infinie de caractéristique sur un produit et faire des recherches suivant les caractéristiques listées dans la base ;)

c'est une vision comme une autre, mais il ne faut dupliquer les tables parce qu'un truc change, il faut composer ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 44 Messages

07 déc. 2011, 16:11

Je te remercie pour tes explications et c'est vrai que je n'avais pas pensé ma table de cette manière.
Je vais,je pense, réfléchir à ma structure dans ce sens.

MErci encore pour tes conseils,

Bonne fin de journée à toutes et tous =;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2011, 16:50

de rien :)

amuse toi bien :)

@+
Il en faut peu pour être heureux ......