Mysql
 sql >> Base de données >  >> RDS >> Mysql

Besoin d'un conseil sur la conception simple de la base de données MySQL

Pourquoi avez-vous un attribute tableau ?

Les attributs sont des colonnes, pas des tables.

Le lien du site Web ne nous dit rien.

L'idée d'une base de données est que vous rejoignez les nombreuses petites tables, selon les besoins, pour chaque requête, vous devez donc vous y habituer. Bien sûr, cela vous donne une grille, mais courte et douce, sans Nulls. Ce que vous essayez de faire, c'est d'éviter les tables; allez avec une seule grille massive, qui est pleine de Nulls.

(coupure)

Ne préfixez pas vos noms d'attributs (noms de colonne) avec le nom de la table, c'est redondant. Cela deviendra clair pour vous lorsque vous commencerez à écrire du SQL qui utilise plus d'une table :vous pouvez alors utiliser le nom de la table ou un alias pour préfixer les noms de colonne qui sont ambigus.

L'exception est le PK, qui est entièrement rendu et utilisé sous cette forme partout où il s'agit d'un FK.

Parcourez le site et lisez quelques questions SQL.

Après avoir fait cela, plus tard, vous pourrez réfléchir si vous voulez de la strength et defense être des attributs (colonnes) de type; ou pas. Et cetera.

Réponses aux commentaires du 30 novembre 2010

.
Excellent, vous comprenez vos données. À droite. Maintenant, je comprends pourquoi vous aviez une table d'attributs.

  1. Veuillez vous assurer que ces 10 exemples sont représentatifs, je les regarde de près.

    • Type :Gem Name:Emberspark Pendant ... Ou, NeckMiscellaneous est-il un type ?
    • Unique est-il un vrai ItemType ? Je pense que non
    • Action.Display "Veuillez retourner à un organisateur de saison"
    • Où sont les attributs pour AttackPower et HitRating ?
      .
  2. Combien y a-t-il de types d'articles différents (sur 35 000), selon mon exemple de groupe de produits. Une autre façon de poser cette question est de savoir combien de variations y a-t-il. Je veux dire, de manière significative, pas 3500 éléments ÷ 8 attributs ?

  3. Est-ce que les items_attributes changeront sans une version de s/w (par exemple, un nouveau Inner Strength attribut) ?

  4. Par élément, quels attributs se répètent (plus d'un) ; pour l'instant je ne vois que Action ?

  5. C'est un jeu, vous avez donc besoin d'une base de données serrée et très rapide, peut-être entièrement résidente en mémoire, n'est-ce pas. Pas de nuls. Pas de VAR. Types de données les plus courts. Ne dupliquez jamais rien (ne vous répétez pas). Êtes-vous satisfait des bits (booléens) et des vecteurs ?

  6. Avez-vous besoin de traduire facilement ces regexes en SQL, ou êtes-vous satisfait d'un travail sérieux pour chacun (c'est-à-dire qu'une fois que vous les faites fonctionner en SQL, ils sont assez stables et vous ne les dérangez pas, à moins que vous ne trouviez un bogue ) (pas de sarcasme, question sérieuse) ?

    6.1 Ou peut-être est-ce l'inverse :la base de données réside sur le disque ; vous le chargez en mémoire une fois ; vous exécutez les regex dessus pendant le jeu ; écrit occasionnellement sur le disque. Il n'est donc pas nécessaire de traduire les regex en SQL ?

Voici un modèle de données de l'endroit où je me dirige, ce n'est pas du tout certain ; il sera modulé par vos réponses. Pour être clair :

  • La sixième forme normale est La ligne se compose de la clé primaire et, au maximum, d'un attribut.

  • J'ai dessiné (6.1) et non (6), car vos données renforcent ma conviction que vous avez besoin d'une base de données relationnelle pure 6NF

  • Mon Modèle de données de groupe de produits , l'exemple meilleur que EAV, est 6NF, puis à nouveau normalisé (pas au sens de la forme normale) par DataType, pour réduire le nombre de tables, ce que vous avez déjà vu. (Les gens d'EAV optent généralement pour une ou quelques tables gigantesques.)

  • Il s'agit d'un 5NF direct, avec seulement les 2 tables de droite en 6NF.

Lien vers le modèle de données du jeu

Lien vers la notation IDEF1X pour ceux qui ne connaissent pas la norme de modélisation relationnelle.

Réponse à la modification n° 2 du 5 décembre 10

1.1. Ok, corrigé.

1.2. Alors IsUnique est un indicateur (booléen) pour Item.

1.3. Action. Je comprends. Alors, où vas-tu le ranger ?

1.4. NeckMiscellaneous signifie que l'article est dans les deux catégories de Neck et Misc . Cela signifie deux Item.Name=Emberspark Pendant distincts , chacun avec une catégorie différente.

.
2. et 5. Vous avez donc besoin d'une base de données résidente en mémoire rapide et rapide. C'est pourquoi j'essaie de vous faire traverser la ligne, loin de GridLand, dans RelationalLand.
.
3. Ok, on reste avec la Cinquième Forme Normale, pas besoin de 6NF ou du Product Cluster (tables par Datatype). Au-delà des Values sont tous des entiers.
.
4. Je peux voir en plus :Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. Les bits sont des booléens { 0 | 1 }. Les vecteurs sont nécessaires pour les projections (relationnelles). Nous y reviendrons plus tard.
.
6. Ok, vous avez expliqué, vous ne traduisez pas les expressions régulières en SQL. (Slog signifie dur labeur)..
7. Qu'est-ce que Category.ParentId ? Catégorie Parentale ? Cela ne s'est pas produit auparavant.
.
8. Attribut.GeneratedId ?

Veuillez évaluer le modèle de données (mis à jour). J'ai quelques colonnes de plus, en plus de ce que vous avez dans la vôtre. S'il y a quelque chose que vous ne comprenez pas dans le modèle de données, posez une question spécifique. Vous avez lu le document Notation, n'est-ce pas ?

J'ai Action sous forme de tableau, avec ItemAction contenant la Value :
Equip: increase attack power by 28 est Action.Name =Increase attack power by et ItemAction.Value =28.