Pensez à une base de données qui a relié les joueurs dans un jeu à un des autres (par exemple, déterminer qui était un ami de chaque joueur et qui était un ennemi de chaque joueur).
|
|
Laissez-d'abord nous créent une table pour stocker les données pour chacun des joueurs. Notez l'addition d'une clef primaire, qui vous permet de compter sur le fait que toutes les rangées ont un champ unique qui peut être employé comme référence. Notez également que chaque rangée des données dans la clef primaire doit être unique à une une autre. Voici le rapport exigé pour créer notre base de données (appelée le gamedata) et notre table de playerdata.
le mysql > CRÉENT le gamedata de BASE DE DONNÉES ; mysql > gamedata d'UTILISATION ; le mysql > CRÉENT le playerdata de TABLEAU (- > NON NUL UNIQUE de username CHAR(255), - > le mot de passe CHAR(255), - > âge INTERNE, - > datecreated l'HORODATEUR, - > KEY(username) PRIMAIRE) ;
_ noter ici comment placer le username colonne UNIQUE et aussi NON NUL. En termes simples, ceci signifie qu'il doit contenir une valeur, et que la valeur ne doit pas n'être identique qu'aucun autre username dans aucun autre disque dans la table. Notez également que nous avons placé la clef primaire de la table pour être le champ de username, car nous rechercherons principalement sur ce champ, que vous verrez dans un moment.
En plus de cette information, nous avons besoin également d'une certaine manière de stocker des amis et des ennemis. Ceci est fait au moyen d'une table de lien. Une table de lien est vraiment juste une table normale de base de données, mais son but principal est de relier des données d'une manière quelconque ou des autres pour conserver l'espace et pour optimiser la manière les accès aux bases de données l'information.
Créons deux tables de lien, une pour relier des amis et une pour relier des ennemis entre eux. Suivre les rapports qui sont exigés pour accomplir ceci.
| Note | Si des tables de lien sont employées, la manière optimisée est stocker des valeurs INTERNES là et d'avoir un champ d'identification avec l'auto_increment dans la table de playerdata comme clef primaire. Elle n'est pas car lisible quand vous exécutez un CHOISI, mais lui est plus rapide de dans vos applications. En mettant à jour le nom d'un joueur, elle ne casse pas l'intégrité de la base de données. En outre, les tables de lien sont souvent des structures à employer seulement quand il y a quantité de n de relations d'une rangée à d'autres rangées. S'il y a toujours seulement une relation (un ami ou ennemi), un lien direct devrait être employé. |
le mysql > CRÉENT des relatefriends de TABLEAU (- > joueur CHAR(255), - > ami CHAR(255)) ;
En outre :
le mysql > CRÉENT des relateenemies de TABLEAU (- > joueur CHAR(255), - > ennemi CHAR(255)) ;
Si nous montrons maintenant les tables dans la base de données avec le suivant commandent :
TABLEAUX de mysql > d'EXPOSITION ;
... nous pouvons voir que notre base de données contient maintenant trois tables différentes—notre table de playerdata et les deux tables de lien.
Maintenant ajoutons un échantillon de données à la table de données de joueur, ainsi nous pouvons expérimenter avec les tables de lien et comprendre la logique de la façon les employer efficacement. Voici le rapport exigé pour ajouter nos données d'échantillon à la table de playerdata :
le mysql > l'INSERTION DANS le playerdata ÉVALUE - >
('Andrew ', 'QWERTY ', 20, NULLE), - > ('Henry ', 'letmein ', 34,
NULLE), - > ('Sandra ', 'dra33 ', 19, NULLE), - > ('John ', 'j12d ',
23, NULLE), - > ('bourrique ', 'jen123 ', 34, NULLE) ;
Si nous choisissons toute l'information à partir de la table de playerdata employant maintenant le suivant commandez :
le mysql > CHOISISSENT * À PARTIR du playerdata
Maintenant que nous avons quelques données d'échantillon, essayons de créer quelques relations entre les joueurs dans la base de données. Ajoutez d'abord à la table de lien de relatefriends le fait qu'Henry est des amis avec Sandra. Voici le rapport exigé pour ajouter ceci à la table de lien :
mysql > INSERTION DANS DES VALEURS de relatefriends - >
('Henry ', 'Sandra ') ;
Maintenant ajoutons encore plus de données d'échantillon dans les relatefriends et des tables de lien de relateenemies et voyons comment nous pouvons manoeuvrer les données. Les deux rapports exigés pour s'ajouter dans les données d'échantillon sont ci-dessous :
| Note | Pour empêcher être un ami et un ennemi en même temps, une table de relation a pu être employée. Ajoutez juste drapeau un "ennemi" de champ, et si on le place, il signifie qu'ils sont des ennemis ; autrement ils sont des amis. |
le mysql > l'INSERTION DANS des relatefriends ÉVALUE - >
('Andrew ', 'Henry '), - > ('Andrew ', 'John '), - > ('Andrew ',
'bourrique '), - > ('Sandra ', 'bourrique ') ;
Et aussi :
le mysql > l'INSERTION DANS des relateenemies ÉVALUE - >
('Andrew ', 'Sandra '), - > ('Henry ', 'bourrique '), - > ('Henry ',
'John ') ;
Maintenant que nous avons toutes nos données d'échantillon, laissez-nous voient si nous pouvons découvrir qui Andrew est des amis avec par employer le rapport suivant :
mysql > ami CHOISI des relatefriends OÙ joueur = 'Andrew ';
Quand nous exécutons ce rapport, les affichages de console une liste de tous les joueurs qu'Andrew est des amis avec.
Encore, nous pouvons faire exactement la même chose avec la table de lien de relateenemies. Par exemple, nous pourrions découvrir tous les ennemis d'Henry avec le rapport suivant :
mysql > ennemi CHOISI des relateenemies OÙ joueur = 'Henry '
Avec ces données, si nous voulions alors découvrir plus d'informations sur l'ennemi d'Henry qui a le username de la bourrique, nous emploierions le rapport suivant :
le mysql > CHOISISSENT * À PARTIR du playerdata OÙ username = 'bourrique ';
Online: 826 users browsing the articles directory
|
|