Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Precisa de uma dica sobre design simples de banco de dados MySQL


Por que você tem um attribute tabela ?

Atributos são colunas, não tabelas.

O link do site não nos diz nada.

A ideia de um banco de dados é que você junte as muitas tabelas pequenas, conforme necessário, para cada consulta, então você precisa se acostumar com isso. Claro, dá-lhe uma grade, mas uma curta e doce, sem Nulos. O que você está tentando fazer é evitar mesas; vá com apenas uma grade massiva, cheia de Nulos.

(recorte)

Não prefixe seus nomes de atributos (nomes de colunas) com o nome da tabela, pois isso é redundante. Isso ficará claro para você quando você começar a escrever SQL que usa mais de uma tabela:então você pode usar o nome da tabela ou um alias para prefixar qualquer nome de coluna que seja ambíguo.

A exceção é o PK, que é renderizado totalmente e usado dessa forma onde quer que seja um FK.

Navegue pelo site e leia algumas perguntas sobre SQL.

Depois de fazer isso, mais tarde, você pode pensar se deseja strength e defense para ser atributos (colunas) de type; ou não. Et cetera.

Respostas aos comentários 30 de novembro de 10


.
Excelente, você entende seus dados. Direita. Agora eu entendo porque você tinha uma tabela de atributos.

  1. Certifique-se de que esses 10 exemplos são representativos, estou analisando-os de perto.
    • Type:Gem Name:Emberspark Pendant ... Ou NeckMiscellaneous é um tipo?
    • O Unique é um ItemType verdadeiro? Acho que não
    • Ação.Exibir "Retorne a um organizador de temporada"
    • Onde estão os Attrinutes para AttackPower e HitRating ?
      .

  2. Quantos tipos diferentes de itens (de 35.000) existem, ala meu exemplo de cluster de produtos. Outra maneira de colocar essa questão é quantas variações existem. Quero dizer, significativamente, não 3500 itens ÷ 8 atributos?

  3. O item_attributes mudará sem uma versão de s/w (por exemplo, um novo Inner Strength atributo)?

  4. Por Item, quais Atributos estão se repetindo (mais de um); até agora eu vejo apenas Ação?

  5. É um jogo, então você precisa de um db que seja apertado e muito rápido, talvez totalmente residente na memória, certo. Sem Nulos. Nada de VAR. Tipos de dados mais curtos. Nunca duplique nada (não se repita). Você está feliz com bits (booleanos) e vetores?

  6. Você precisa traduzir facilmente esses regexes em SQL, ou você está feliz com um sério trabalho árduo para cada um (ou seja, uma vez que você os faz funcionar no SQL, eles são bastante estáveis ​​​​e você não mexe com isso, a menos que encontre um bug ) (sem sarcasmo, pergunta séria) ?

    6.1 Ou talvez seja o contrário:o db é residente em disco; você o carrega na memória uma vez; você executa os regexes nele durante o jogo; ocasionalmente gravando em disco. Portanto, não há necessidade de traduzir os regexes para SQL?

Aqui está um modelo de dados de onde estou indo, isso não é certo; ele será modulado por suas respostas. Para ser claro:

  • A sexta forma normal é A linha consiste na chave primária e, no máximo, um atributo.

  • Eu desenhei (6.1) não (6), porque seus dados reforçam minha crença de que você precisa de um banco de dados relacional 6NF puro

  • Meu Modelo de dados de cluster de produto , o exemplo melhor que EAV, é 6NF, então normalizado novamente (não no sentido de forma normal) por DataType, para reduzir o número de tabelas, que você já viu. (As pessoas do EAV geralmente optam por uma ou algumas mesas gigantescas.)

  • Esta é a 5FN direta, com apenas as 2 mesas à direita na 6FN.

Link para o modelo de dados do jogo

Link para notação IDEF1X para aqueles que não estão familiarizados com o Padrão de Modelagem Relacional.

Resposta à edição nº 2 05 10 de dezembro


1.1. Pronto, corrigido.

1.2. Então IsUnique é um Indicador (booleano) para Item.

1.3. Açao. Eu entendo. Então, onde você vai armazená-lo?

1.4. Pescoço Diversos significa que o item está em ambas as categorias de Neck e Misc . Isso significa dois Item.Name=Emberspark Pendant separados , cada um com uma categoria diferente.

.
2. e 5. Então você precisa de um banco de dados residente em memória rápido e rápido. É por isso que estou tentando fazer você cruzar a linha, longe de GridLand, em RelationalLand.
.
3. Ok, ficamos com Fifth Normal Form, sem necessidade de 6NF ou do Product Cluster (tabelas por Datatype). Até agora os Values são todos inteiros.
.
4. Posso ver adicionalmente:Level , RequiredLevel , IsUnique , BindsPickedUp , BindsEquipped .
.
5. Bits são booleanos { 0 | 1}. Vetores são necessários para projeções (relacionais). Chegaremos a eles mais tarde.
.
6. Ok, você explicou, você não está traduzindo expressões regulares para SQL. (Slog significa trabalho duro)..
7. O que é Category.ParentId ? Categoria Parental ? Isso não aconteceu antes.
.
8. Attribute.GeneratedId ?

Por favor, avalie o Modelo de Dados (Atualizado). Tenho mais algumas colunas, além das que você tem na sua. Se houver algo que você não entenda no Modelo de Dados, faça uma pergunta específica. Você leu o documento Notação, certo?

Eu tenho Action como uma tabela, com ItemAction segurando o Value :
Equip: increase attack power by 28 é Action.Name =Increase attack power by e ItemAction.Value =28.