2010-12-15 71 views
1

Je me demandais s'il y avait un moyen de créer une clé étrangère pour une liste d'entiers qui répond sur des éléments entiers simples de la liste. Par exemple, j'ai une table "exercices". Sur cette table, je voudrais maintenir deux colonnes connexes: « exercisesID » « relatedExerciseIDs »MYSQL: Création d'une liste d'entiers (ID) pouvant utiliser des contraintes de clé étrangère pour chaque élément entier?

Cependant, « relatedExerciseIDs » est un VARCHAR contenant délimité par des virgules « exerciseID » s. Lors d'une suppression d'un exercice de la table, tous les exercices avec le "exerciseID" supprimé dans leur liste "relatedExerciseIDs" devraient le supprimer.

Est-ce possible? Comment puis-je faire ceci?

Merci pour votre avis! Je serais également intéressé par l'utilisation d'un type de colonne autre qu'un VARCHAR si cela est possible =)

Répondre

1

Toutes les valeurs de colonne doivent être atomiques.

Vous ne devriez pas avoir une liste de tout ce que vous voulez interroger dans une seule valeur.

La façon de relier les exercices à d'autres exercices est avec un second tableau. Il aura deux colonnes, chacune contenant un ID d'exercice, où les deux colonnes sont une référence étrangère à la table des exercices.

+0

= S soirs va être une longue nuit puis hahaha ... merci! J'ai un tas de colonnes comme celles-ci, donc je suppose que je vais devoir faire une table pour chacun. J'espérais qu'il y avait un moyen plus facile. la vérité est difficile à avaler, je suppose. – Garrett

0

La seule façon de le faire est soit via une procédure stockée ou dans la langue de votre choix. Lorsque vous supprimez l'enregistrement, vous devez alors faire une requête LIKE pour trouver un enregistrement avec la valeur dans votre champ délimité. Ce n'est vraiment pas la meilleure façon de faire les choses, et cela serait lent puisque vous ne pouvez pas indexer ce champ comme vous le souhaitez.

Votre meilleur pari serait de créer une autre table pour définir les relations entre les exercices, en utilisant seulement deux champs id d'exercice (exercice_id, related_exercise_id). Vous devriez lire sur Database Normalization.

+0

Je me sens si stupide = S Je suis un cours sur les bases de données, où nous avons tout appris sur les formes normales et la façon optimale d'organiser une base de données sans perte ... Je suppose que je suis un peu nouveau. ça, ou j'échoue mon examen la semaine prochaine! haha – Garrett

+0

@Garrett: Ne vous sentez pas mal; nous partons tous de quelque part. Vous avez juste besoin de toujours améliorer. Si vous gardez cela à l'esprit, vous irez loin. Bonne chance pour votre examen. – AgentConundrum