Bonjour,
Je viens de découvrir les foreign keys, je refais donc la structure de ma base de données pour en profiter.
Voici, en simple, ce dont je dispose, et ce que je souhaite :
Un Utilisateur peut posséder plusieurs comptes.
Un compte possède plusieurs lignes.
Voici donc la structure que je pense obtenir :
- User :
- UserID : int, AutoIncrement, PrimaryKey
- Compte :
- UserID : Foreign Key
- CompteID : tinyint, AutoIncrement, PrimaryKey
- Ligne :
- UserID : Foreign Key
- CompteID : Foreign Key
- LigneID : smallint, AutoIncrement, PrimaryKey
J'utilise phpMyAdmin, il faudra donc mettre les tables avec les moteur de stockage InnoDB.
Je souhaite que lorsqu'on supprime un User, alors on supprime également les comptes et lignes associées.
De la même manière si l'on supprime un compte, on supprime les lignes associées (mais pas l'User). Attention cependant, il se peut qu'un User possède 0 comptes, et un Compte, 0 lignes.
J'ai donc mis dans les clé étrangère : ON DELETE CASCADE, mais rien dans le champ ON UPDATE. J'ai juste ?
Enfin, je souhaite que chaque ligneID s'autoincremente à partir de 1 pour chaque compte, et que chaque compte s'autoincremente à partir de 1 pour chaque utilisateur. (Ce que j'avais réussi à faire en mettant plusieurs champs de la même table en Primary Key), mais je ne sais pas si cela marchera également avec les foreign key comme indiqué dans la structure ci-dessus.
"Ta qu'à tester" me direz vous... Oui mais voila, je n'arrive pas à créer cette structure sous phpMyAdmin, j'obtiens sans cesse le message d'erreur :
...au moment de modifier ma table en InnoDB, alors qu'il y a bien un seul champ Auto-Increment dans chacune des table.#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
La structure proposée est-t-elle bonne pour l'usage que je souhaite en faire ?
Pourquoi cette erreur #1075 lorsque j'essaye de la réaliser sous phpMyAdmin (je précise que les tables existent déja, car crées avant que je ne découvre l'existance des clés étrangères, je cherche donc à modifier la structure actuelle, et non tout recréer).
Merci pour vos conseils,
Fred
Partager