[Ajuda] MySQL - colunas
#1

Olб, estou aprendendo mysql no momento e preciso salvar os itens da conta do jogador. Nгo sei qual a melhor forma para fazer isso, mas pensei em salvar cada item em uma coluna. Sу nгo sei como irei fazer para criar as colunas referente a quantidade de itens que o jogador possui.

Esta seria a tabela com apenas um item.
PHP код:
CREATE TABLE `itens_conta` (
 `
idcontaint(5NOT NULL AUTO_INCREMENT,
 `
item1int(3NOT NULL,
 
PRIMARY KEY (`idconta`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
Esta seria a tabela com 2 itens.
PHP код:
CREATE TABLE `itens_conta` (
 `
idcontaint(5NOT NULL AUTO_INCREMENT,
 `
item1int(3NOT NULL,
 `
item2int(3NOT NULL,
 
PRIMARY KEY (`idconta`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
Alguйm poderia me explicar como eu poderia fazer isso da melhor forma.

Outra dъvida, com essa tabela jб seriam 2 no total para o jogador, й melhor criar tabelas diferenciadas para cada tipo de salvamento ou salvar todos os dados em uma tabela somente?

Obrigado
Reply
#2

Jб que o relacionamento entre jogadores e itens й 1-n, o ideal й criar uma tabela com o id do item e o id do jogador, sendo este ъltimo uma chave estrangeira (foreign key).

http://www.devmedia.com.br/modelo-en...ento-der/14332

Estude o link e vocк entenderб o modo ideal de criar as tabelas e estabelecer os relacionamentos.
Reply
#3

Quote:
Originally Posted by zPain
Посмотреть сообщение
Jб que o relacionamento entre jogadores e itens й 1-n, o ideal й criar uma tabela com o id do item e o id do jogador, sendo este ъltimo uma chave estrangeira (foreign key).

http://www.devmedia.com.br/modelo-en...ento-der/14332

Estude o link e vocк entenderб o modo ideal de criar as tabelas e estabelecer os relacionamentos.
Obrigado,
Vou dar uma estudada. +rep
Reply
#4

Desculpe o double.

Consegui fazer minhas tabelas e jб aproveitei organizar melhor a database. Fiz as relaзхes das tabelas, mas nгo sei se fiz da forma correta, se caso eu tenha feito a relaзгo errada por favor se puder me dizer, ficou dessa forma.

contas 1:1 stats
contas 1:1 skills
contas 1:n itens


Clique caso nгo carregue a imagem

Como eu faria para fazer uma consulta, remover ou inserir algum item na minha tabela? Ou mesmo os stats e skills do jogador.
Reply
#5

Me responde uma coisa, 1 jogador vai ter mais de 1 stats? E skills?
Reply
#6

Quote:
Originally Posted by ipsNan
Посмотреть сообщение
Me responde uma coisa, 1 jogador vai ter mais de 1 stats? E skills?
Nгo. Mas fiz a separaзгo das tabelas dos stats e skills para talvez ficar mais organizado, mas provavelmente serб mais complicado de carregar e salvar os dados ?
Reply
#7

Se stats nгo й uma tabela pra formar relacionamento 1..n, entгo й melhor que vocк deixe lvl e xp dentro da tabela de contas...

Essa questгo de organizaзгo й o de menos, assim vocк ganha em desempenho.

O mesmo para skills...

Quanto menos joins vocк tiver que fazer para buscar informaзхes completas sobre um dado, melhor serб o desempenho do seu banco.

Sobre os itens, quando trabalhamos com tabelas para relacionamentos, usamos o seguinte:

Criamos tabelas para os dois dados que vгo ter um relacionamento, ou seja, uma tabela para jogador (conta) e outra tabela para item, na tabela jogador vai conter o ID e oque mais vocк quiser.

E na tabela item vocк vai ter o ID do item, nome do item e oque mais vocк quiser para descrever o item.

E ai vamos ter uma terceira tabela que irб dizer que esses dois se relacionam, aonde a tabela terб o ID dela de registro primary key autoincrement, e terб o id do jogador como foreign key e o id do item como foreign key.

Essa й a forma mais utilizada, ai quando vocк quer pegar todos os itens de um determinado jogador, vocк vai e procura nessa tabela todos os itens que contйm o player_id x, e depois vocк procura na tabela de itens todos os nomes de itens que contenham os id que vocк pegou na tabela de relacionamento.
Reply
#8

Quote:
Originally Posted by ipsNan
Посмотреть сообщение
Se stats nгo й uma tabela pra formar relacionamento 1..n, entгo й melhor que vocк deixe lvl e xp dentro da tabela de contas...

Essa questгo de organizaзгo й o de menos, assim vocк ganha em desempenho.

O mesmo para skills...

Quanto menos joins vocк tiver que fazer para buscar informaзхes completas sobre um dado, melhor serб o desempenho do seu banco.

Sobre os itens, quando trabalhamos com tabelas para relacionamentos, usamos o seguinte:

Criamos tabelas para os dois dados que vгo ter um relacionamento, ou seja, uma tabela para jogador (conta) e outra tabela para item, na tabela jogador vai conter o ID e oque mais vocк quiser.

E na tabela item vocк vai ter o ID do item, nome do item e oque mais vocк quiser para descrever o item.

E ai vamos ter uma terceira tabela que irб dizer que esses dois se relacionam, aonde a tabela terб o ID dela de registro primary key autoincrement, e terб o id do jogador como foreign key e o id do item como foreign key.

Essa й a forma mais utilizada, ai quando vocк quer pegar todos os itens de um determinado jogador, vocк vai e procura nessa tabela todos os itens que contйm o player_id x, e depois vocк procura na tabela de itens todos os nomes de itens que contenham os id que vocк pegou na tabela de relacionamento.
Eu acho que entendi, mas nгo sei como criar a relaзгo, o cуdigo em si.
No caso eu poderia utilizar a primary key da tabela contas na tabela itens jб que sempre serб diferente de um jogador para outro, correto ?

Procurei no fуrum e encontrei alguns tutoriais: https://sampforum.blast.hk/showthread.php?tid=552693, http://forum.sa-mp.com/showthread.ph...ht=foreign+key

Tentei fazer conforme o tutorial do Vince, mas nгo sei se estou fazendo certo, pois a tabela nгo foi criada e no tutorial ele nгo explicou muito detalhadamente em questгo do cуdigo.

Estou tentando fazer dessa forma :
(...) - continuaзгo das colunas
PHP код:
"CREATE TABLE IF NOT EXISTS `contas` ( 
    `idconta` INT NOT NULL AUTO_INCREMENT, 
    (...), 
    PRIMARY KEY (`idconta`) )"
"CREATE TABLE IF NOT EXISTS `itens` ( 
    `id` INT NOT NULL AUTO_INCREMENT, 
    `contas_idconta` INT NOT NULL, 
    `iditem` INT NOT NULL, 
    PRIMARY KEY (`id`),
    ADD FOREIGN KEY (`contas_idconta`)  
    REFERENCES `contas` (`idconta`)
    ON UPDATE CASCADE  
    ON DELETE CASCADE )" 
Reply
#9

1 tabela para conta, 1 tabela para item, 1 tabela para o relacionamento
Код:
CREATE TABLE conta (
	id INT NOT NULL,
	PRIMARY KEY (id)
)

CREATE TABLE item (
	id INT NOT NULL,
	PRIMARY KEY (id)
)

CREATE TABLE itens_por_conta (
	id INT NOT NULL,
	id_conta INT,
	id_item INT,
	PRIMARY KEY (id),
	FOREIGN KEY (id_conta), REFERENCES conta(id),
	FOREIGN KEY (id_item), REFERENCES item(id)
)
Se vocк for fazer a leitura, sai o seguinte:

1 conta tem 1 identificador, 1 item tem 1 identificador.

e existe um relacionamento de itens por conta, aonde 1 conta pode ter vбrios itens, e 1 item pode pertencer a vбrias contas nesse relacionamento. (conhecimento n..n)


OBS: Nгo sei se a sintaxe estб correta, procurei no ****** um exemplo e ai montei esse.

Fonte de pesquisa: http://www.w3schools.com/sql/sql_foreignkey.asp
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)