sql >> Base de Datos >  >> RDS >> Mysql

Necesito un consejo sobre el diseño simple de MySQL db

¿Por qué tienes un attribute? mesa ?

Los atributos son columnas, no tablas.

El enlace del sitio web no nos dice nada.

La idea general de una base de datos es unir las muchas tablas pequeñas, según sea necesario, para cada consulta, por lo que debe acostumbrarse a eso. Claro, te da una cuadrícula, pero una corta y dulce, sin Nulos. Lo que intenta hacer es evitar las mesas; ve con solo una cuadrícula masiva, que está llena de Nulos.

(recorte)

No anteponga los nombres de sus atributos (nombres de columna) con el nombre de la tabla, eso es redundante. Esto quedará claro para usted cuando comience a escribir SQL que usa más de una tabla:entonces puede usar el nombre de la tabla o un alias para anteponer cualquier nombre de columna que sea ambiguo.

La excepción es el PK, que se procesa por completo y se usa de esa forma siempre que sea un FK.

Explore el sitio y lea algunas preguntas de SQL.

Después de hacer eso, más adelante, puedes pensar si quieres strength y defense ser atributos (columnas) de type; o no. Etcétera.

Respuestas a los comentarios del 30 de noviembre de 2010

.
Excelente, entiendes tus datos. Derecha. Ahora entiendo por qué tenía una tabla de atributos.

  1. Asegúrese de que esos 10 ejemplos sean representativos, los estoy mirando de cerca.

    • Tipo:Nombre de la gema:Colgante Emberspark... ¿O es NeckMiscellaneous un tipo?
    • ¿Único es un ItemType verdadero? creo que no
    • Action.Display "Por favor regrese a un organizador de temporada"
    • ¿Dónde están los Atributos para AttackPower? y HitRating ?
      .
  2. ¿Cuántos tipos diferentes de artículos (de 35 000) hay, como mi ejemplo de grupo de productos? Otra forma de formular esa pregunta es cuántas variaciones hay. Quiero decir, de manera significativa, ¿no 3500 elementos ÷ 8 atributos?

  3. ¿Cambiarán los atributos_de_elemento sin un lanzamiento de s/w (por ejemplo, un nuevo Inner Strength atributo) ?

  4. Por elemento, qué atributos se repiten (más de uno); hasta ahora solo veo Acción ?

  5. Es un juego, por lo que necesita una base de datos ajustada y muy rápida, tal vez totalmente residente en memoria, ¿verdad? Sin nulos. Nada de VAR. Tipos de datos más cortos. Nunca dupliques nada (no te repitas). ¿Está satisfecho con los bits (booleanos) y los vectores?

  6. ¿Necesita traducir fácilmente esas expresiones regulares a SQL, o está contento con un trabajo serio para cada una (es decir, una vez que las hace funcionar en SQL, son bastante estables y luego no se mete con ellas, a menos que encuentre un error) ) (sin sarcasmo, pregunta seria) ?

    6.1 O tal vez sea al revés:la base de datos reside en el disco; lo carga en la memoria una vez; ejecutas las expresiones regulares en eso durante el juego; ocasionalmente escribiendo en el disco. Por lo tanto, ¿no hay necesidad de traducir las expresiones regulares a SQL?

Aquí hay un modelo de datos de hacia dónde me dirijo, esto no es del todo seguro; será modulado por sus respuestas. Para ser claro:

  • La Sexta Forma Normal es La Fila consta de la Clave Principal y, como máximo, un Atributo.

  • He dibujado (6.1) no (6), porque sus datos refuerzan mi creencia de que necesita una base de datos relacional 6NF pura

  • Mi Modelo de datos de clúster de productos , el ejemplo mejor que EAV, es 6NF, luego Normalizado nuevamente (No en el sentido de Forma normal) por DataType, para reducir el número de tablas, que ya ha visto. (La gente de EAV suele optar por una o unas pocas mesas gigantes).

  • Esto es 5NF directo, con solo las 2 tablas de la derecha en 6NF.

Enlace al modelo de datos del juego

Enlace a notación IDEF1X para aquellos que no están familiarizados con el Estándar de modelado relacional.

Respuesta a la edición n.° 2, 5 de diciembre de 10

1.1. Vale, corregido.

1.2. Entonces IsUnique es un indicador (booleano) para Item.

1.3. Acción. Entiendo. Entonces, ¿dónde lo vas a guardar?

1.4. CuelloMisceláneo significa que el artículo está en ambas categorías de Neck y Misc . Eso significa dos Item.Name=Emberspark Pendant separados , cada uno con una categoría diferente.

.
2. y 5. Por lo tanto, necesita una base de datos residente en memoria rápida y rápida. Es por eso que estoy tratando de llevarte al otro lado de la línea, lejos de GridLand, hacia RelationalLand.
.
3. Ok, nos quedamos con la Quinta Forma Normal, no necesitamos 6NF o el Producto Cluster (tablas por Tipo de Datos). Según los Values son todos enteros.
.
4. Puedo ver adicionalmente:Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. Los bits son booleanos { 0 | 1 }. Los vectores son necesarios para las proyecciones (relacionales). Nos ocuparemos de ellos más tarde.
.
6. Ok, lo has explicado, no estás traduciendo expresiones regulares a SQL. (Slog significa trabajo duro).
7. ¿Qué es Category.ParentId? ¿Categoría principal? Eso no ha surgido antes.
.
8. Attribute.GeneratedId ?

Evalúe el modelo de datos (actualizado). Tengo algunas columnas más, además de lo que tienes en la tuya. Si hay algo que no entiende en el modelo de datos, haga una pregunta específica. Has leído el documento de Notación, ¿verdad?

Tengo Action como una tabla, con ItemAction sosteniendo el Value :
Equip: increase attack power by 28 es Action.Name =Increase attack power by y ItemAction.Value =28.