Question

Je travaille sur un MUD (Multi Dungeon User) en Python et je suis tout simplement obtenir maintenant autour du point où je dois ajouter quelques chambres, des ennemis, des objets, etc. Je pourrais hardcode tout cela, mais il semble comme celui-ci est plus d'un emploi pour une base de données.

Cependant, je ne l'ai jamais vraiment fait un travail avec les bases de données avant, donc je me demandais si vous avez des conseils sur la façon de le mettre en place?

  • Quel format dois-je stocker les données dans?
    • Je pensais à stocker un objet Dictionary dans la base de données pour chaque entité. En chemin htis, je pourrais alors ajouter simplement de nouveaux attributs à la base de données à la volée sans altérer les colonnes de la base de données. Est-ce que cela vous semble raisonnable?
  • Dois-je stocker toutes les informations dans la même base de données, mais dans différentes tables ou différentes entités (ennemis et chambres) dans différentes bases de données.

  • Je sais que ce sera une boîte de Pandore, mais ce sont quelques suggestions pour une bonne base de données? MySQL est un bon choix?

Était-ce utile?

La solution

1) Il n'y a presque jamais de raison d'avoir des données pour la même application dans différentes bases de données. Non, sauf si vous êtes une entreprise de taille Fortune500 (OK, je suis exaggregating).

2) Stocker les informations dans différentes tables.

Par exemple:

  • T1: Chambres

  • T2: propriétés communes de la chambre (aplicable à chaque chambre), avec une ligne par ** chambre *

  • T3: Chambre des propriétés uniques (applicables à la minorité de chambres, avec une ligne par propriété par chambre - Thos permet d'ajouter facilement des propriétés personnalisées sans ajouter de nouvelles colonnes

  • T4: connexions-salle

    Avoir T2 et T3 est important car il vous permet de combiner l'efficacité et la vitesse de idée rangée par chambre où elle est applicable avec la flexibilité / maintenabilité / économie d'espace d'attribut par-entité par ligne (ou un objet / attribut / valeur IIRC il est appelé en termes de fantaisie) schéma

Bonne discussion

3) Mise en œuvre sage, essayer d'écrire quelque chose réutilisable, par exemple ont des méthodes « génériques » Get_room, dont l'accès sous le DB -. = idéalement via SQL ou effectuez des opérations ANSI SQL afin que vous puissiez changer de survivre DB back-end assez sans douleur

Pour le travail initial, vous pouvez utiliser SQLite. Pas cher, facile et compatible SQL (la meilleure propriété de tous). Est à peu près rien Installer beaucoup, la gestion DB peut être fait par des outils freeware ou même plug-in FireFox IIRC (tous les magasins de données FireFox 3 - histoire, signets, lieux, etc ... - sont toutes les bases de données SQLite).

Pour plus tard, MySQL ou Postgres (je ne fais soit un professionnel ne peut donc pas recommander un). IIRC à un moment Sybase a serveur libre db personnel aussi bien, mais aucune idée si c'est toujours le cas.

Autres conseils

  • Cette technique est appelée modèle valeur d'attribut d'entité . Il est normalement préférable d'avoir le schéma DB qui reflète la structure des objets, et mettre à jour le schéma lorsque vos modifications de la structure de l'objet. Un tel schéma strict est plus facile d'interroger et il est plus facile de vous assurer que les données sont correctes au niveau de la base de données.
  • Une base de données avec plusieurs tables est la façon de le faire.
  • Si vous voulez un serveur de base de données, je recommande ai PostgreSQL. MySQL a quelques avantages, comme la réplication facile, mais PostgreSQL est généralement plus agréable de travailler avec. Si vous voulez quelque chose de plus petit qui fonctionne directement avec l'application, SQLite est une bonne base de données intégrée.

Le stockage d'un objet entier (sérialisé / codé) en tant que valeur dans la base de données est mauvaise pour effectuer des requêtes - Je suis sûr que certaines requêtes dans votre boue ne seront pas besoin de connaître 100% d'attributs, ou peuvent récupérer une liste d'objets par une valeur d'attributs.

  

il semble que cela est plus d'un emploi   pour une base de données

Il est vrai que bien que « base de données » ne doit pas signifier «base de données relationnelle. La plupart des ILM existants stocker toutes les données en mémoire, et le lire depuis fichier plat enregistré dans un format de données en texte brut. Je recommande pas nécessairement cette voie, tout en soulignant qu'une base de données traditionnelle est pas nécessaire. Si vous voulez aller la route relationnelle, les versions récentes de Python viennent avec sqlite qui est une base de données relationnelle intégré léger avec une bonne prise en charge SQL.

En utilisant les bases de données relationnelles avec votre code peut être gênant. Toute modification apportée à une classe logique de jeu peut nécessiter un changement parallèle à la base de données, et les modifications du code lecture et d'écriture à la base de données. Pour cette raison, une bonne planification vous aidera beaucoup, mais il est difficile de planifier un schéma de base de données sans bonne expérience. Au moins obtenir vos classes d'entités planifiées d'abord, puis construire un schéma de base de données autour d'elle. Lecture sur normalisant une base de données et comprendre les principes qui y aideront.

Vous pouvez utiliser un « mappeur objet-relationnel » qui peut simplifier beaucoup de cela pour vous. Des exemples en Python incluent SQLObject , SQLAlchemy et automne . Ceux-ci se cachent beaucoup de complexités pour vous, mais en raison peut cacher certains détails importants aussi. Je vous recommande d'utiliser la base de données directement jusqu'à ce que vous êtes plus familier avec elle, et envisager d'utiliser un ORM à l'avenir.

  

Je pensais à stocker un dictionnaire   objet dans la base de données pour chaque   entité. En chemin htis, je pouvais alors   il suffit d'ajouter de nouveaux attributs à la   base de données à la volée sans altérer   les colonnes de la base de données. Est-ce que   son raisonnable?

Malheureusement pas - si vous faites cela, vous perdez 99% des capacités de la base de données et utilisez efficacement comme un magasin de données glorifiée. Toutefois, si vous n'avez pas besoin des capacités de base de données ci-dessus, c'est un itinéraire valide si vous utilisez l'outil pour le travail. Le module standard shelve vaut bien regarder à cet effet.

  

Dois-je stocker toutes les informations   la même base de données, mais dans différents   tables ou différentes entités (ennemis   et chambres) dans différentes bases de données.

Base de données One. Une table dans la base de données par type d'entité. Voilà l'approche typique lors de l'utilisation d'une base de données relationnelle (par exemple. MySQL, SQL Server, SQLite, etc.).

  

Je sais que ce sera une boîte de Pandore,   mais ce sont quelques suggestions pour un   bonne base de données? MySQL est un bon choix?

Je vous conseille de coller avec sqlite jusqu'à ce que vous êtes plus familier avec SQL. Sinon, MySQL est un choix raisonnable pour une base de données de jeu gratuit, tout comme PostGreSQL.

Base de données One. Chaque table de base de données doit se référer à un objet de données réelles.

Par exemple, créer une table pour tous les articles, toutes les créatures, toutes les classes de personnages, tous les trésors, etc.

Passez un peu de temps et comprendre comment les objets seront liés les uns aux autres, car cela aura une incidence sur la structure de votre base de données. Par exemple, un personnage peut avoir plus d'une classe de personnage? Les monstres peuvent avoir des classes de personnages? Les monstres peuvent transporter des objets? Les chambres peuvent avoir plus d'un monstre?

Il semble pédant, mais vous tôt vous épargner beaucoup de mal à déterminer par quelle base de données des objets « appartiennent » à laquelle d'autres objets de base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top