30-12-2007, 03:08 PM
alfanor a écrit :Si je comprend bien donc, il me faudrait une table avec 6 clés étrangères, une clé primaire (donc id_relation c'est bien ça ?) et bien sûr l'id du statut de la relation ?Il y aura 7 champs dans ta table (telle que conçue actuellement) : les 6 clés étrangères, et le statut. La clé primaire est composée des 6 premiers champs, donc pas de champ supplémentaire pour cette dernière.
Citation :Mais c'est "légal" d'avoir 6 clés étrangères dont seulement deux seront exploitées ?Aucun problème, une clé étrangère a le droit d'être NULL si on l'autorise, ça définit une relation "facultative", heureusement qu'on a le droit sinon comment exprimer le fait qu'un personnage peut avoir 0 ou 1 arme en main ?
![Wink Wink](https://jeuweb.org/images/smilies/wink.png)
La seule règle que ta table doit impérativement respecter pour la cohérence des données, et qui ne pourra être imposée par le schéma lui-même, c'est le fait qu'il doit y avoir 1 et 1 seul champ *A défini, et 1 et 1 seul champ *B défini.
Citation :Ou bien du moment que je ne met pas la table en InnoDB c'est bon ?Si si bien sûr, ta table a de *vraies* clés étrangères, c'est tout l'intérêt de cette version par rapport à la table "générique". Donc InnoDB est tout à fait adaptée.
La requête qui détecterait les incohérences pourrait ressembler à ça :
Code :
SELECT * FROM statut WHERE
-- pas de champ *A
(joueurA IS NULL AND territoireA IS NULL AND allianceA IS NULL)
-- pas de champ *B
OR (joueurB IS NULL AND territoireB IS NULL AND allianceB IS NULL)
-- deux champs *A ou plus
OR (joueurA IS NOT NULL AND territoireA IS NOT NULL)
OR (joueurA IS NOT NULL AND allianceA IS NOT NULL)
OR (territoireA IS NOT NULL AND allianceA IS NOT NULL)
-- deux champs *B ou plus
OR (joueurB IS NOT NULL AND territoireB IS NOT NULL)
OR (joueurB IS NOT NULL AND allianceB IS NOT NULL)
OR (territoireB IS NOT NULL AND allianceB IS NOT NULL)
![Wink Wink](https://jeuweb.org/images/smilies/wink.png)
Ressources [PHP][MySQL][
prototype.js]
![[Image: fav.png]](http://prototypejs.org/images/fav.png)