Jump to content


Photo

Relacionamentos


  • Faça o login para participar
9 replies to this topic

#1 pgnall

pgnall

    Enable

  • Usuários
  • 383 posts
  • Sexo:Masculino
  • Localidade:http://eduardo.sganzerla.net

Posted 16/08/2006, 17:34

Olá pessoal, estou criando umas tabelas e estou com problemas no relacionamento delas.

Preciso criar os relacionamentos:
Quando deletar alguma enquete deleta suas perguntas e opções.
Quando deletar algum usuario deleta suas enquetes.

Minhas tabelas são:

enquetes

+------------+----------------------+------+-----+---------+----------------+
| Field	  | Type				 | Null | Key | Default | Extra		  |
+------------+----------------------+------+-----+---------+----------------+
| id_enquete | smallint(5) unsigned | NO   | PRI | NULL	| auto_increment |
| id_usuario | smallint(5) unsigned | NO   | MUL | NULL	|				|
| md_ativa   | tinyint(1) unsigned  | NO   |	 | NULL	|				|
+------------+----------------------+------+-----+---------+----------------+

enquete_opcoes

+------------+----------------------+------+-----+---------+----------------+
| Field	  | Type				 | Null | Key | Default | Extra		  |
+------------+----------------------+------+-----+---------+----------------+
| id_opcao   | smallint(5) unsigned | NO   | PRI | NULL	| auto_increment |
| id_enquete | smallint(5) unsigned | NO   |	 | NULL	|				|
| txt_opcao  | varchar(100)		 | NO   |	 | NULL	|				|
| num_votos  | tinyint(3) unsigned  | YES  |	 | 0	   |				|
+------------+----------------------+------+-----+---------+----------------+

enquete_perguntas

+--------------+----------------------+------+-----+---------+----------------+
| Field		| Type				 | Null | Key | Default | Extra		  |
+--------------+----------------------+------+-----+---------+----------------+
| id_pergunta  | smallint(5) unsigned | NO   | PRI | NULL	| auto_increment |
| id_enquete   | smallint(5) unsigned | NO   | MUL | NULL	|				|
| txt_pergunta | tinytext			 | NO   |	 | NULL	|				|
+--------------+----------------------+------+-----+---------+----------------+

usuarios

+---------------+----------------------+------+-----+---------+---------------+
| Field		 | Type				 | Null | Key | Default | Extra		 |
+---------------+----------------------+------+-----+---------+---------------+
| id_usuario	| smallint(5) unsigned | NO   | PRI | NULL	| auto_increment|
| txt_nome	  | varchar(50)		  | NO   |	 | NULL	|			   |
| txt_sobrenome | varchar(100)		 | NO   |	 | NULL	|			   |
| txt_email	 | tinytext			 | NO   |	 | NULL	|			   |
| txt_nick	  | varchar(15)		  | NO   |	 | NULL	|			   |
| crypt_senha   | varchar(32)		  | NO   |	 | NULL	|			   |
| num_enquetes  | tinyint(3) unsigned  | NO   |	 | NULL	|			   |
| md_ativo	  | tinyint(1) unsigned  | NO   |	 | NULL	|			   |
+---------------+----------------------+------+-----+---------+---------------+

Valeu

Edição feita por: pgnall, 16/08/2006, 17:45.

Eduardo Sganzerla
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀


www.Eu Sei Escrever.com.br - Adote esta campanha!

#2 Andreia Regina

Andreia Regina

    Veterano

  • Conselheiros
  • 1347 posts
  • Sexo:Feminino
  • Localidade:PR
  • Interesses:PHP; MySQL; Javascript; CSS; tudo ligado ao desenvolvimento web.

Posted 16/08/2006, 18:19

Acessa: http://dev.mysql.com...onstraints.html

Fórum WMO - Conselheira - Na equipe desde 31/01/2006.
Links importantes: Regras de conduta - Busca do fórum


#3 pgnall

pgnall

    Enable

  • Usuários
  • 383 posts
  • Sexo:Masculino
  • Localidade:http://eduardo.sganzerla.net

Posted 16/08/2006, 18:22

Obrigado Andreia...

Mais uma coisinha, eu tenho que fazer de usuarios deletarem enquetes ( OK )

Mas quando deletar uma enquete, não encontrei um modo de deletar em 2 tabelas...
Eduardo Sganzerla
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀


www.Eu Sei Escrever.com.br - Adote esta campanha!

#4 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 16/08/2006, 22:45

Obrigado Andreia...

Mais uma coisinha, eu tenho que fazer de usuarios deletarem enquetes ( OK )

Mas quando deletar uma enquete, não encontrei um modo de deletar em 2 tabelas...



voce quer que delete os dados das tabelas enquete_perguntas e enquete_opcoes certo? bom.. dá uma lida no link que a andréia regina mandou.. ele explica como criar chaves estrangeiras....

voce terá que fazer os campos os campos ID_ENQUETE destas duas tabelas serem chaves estrangeiras da tabela enquetes, e atribuira a ordem ON DELETE = CASCADE

OBS. este tipo de relacionamento requer que a tabela seje do tipo INNODB.

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#5 pgnall

pgnall

    Enable

  • Usuários
  • 383 posts
  • Sexo:Masculino
  • Localidade:http://eduardo.sganzerla.net

Posted 17/08/2006, 19:53

ta beleza, eu sei usar foreign keys... só que eu não to sabendo faze esse relacionamento, pois tenho pouca experiencia nisso e não consigo usar duas foreign keys na mesma tabela...
Eduardo Sganzerla
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀


www.Eu Sei Escrever.com.br - Adote esta campanha!

#6 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 18/08/2006, 14:56

ta beleza, eu sei usar foreign keys... só que eu não to sabendo faze esse relacionamento, pois tenho pouca experiencia nisso e não consigo usar duas foreign keys na mesma tabela...


bom voce sabendo ou não tai um pekeno script com a modelagem das chaves estrangeiras... agora soh uam pergunta... poque vc tem uam tabela enquete e dai tem uam tabela enquete_pergunta e outra enquete_opcoes... naum sei se vc pensou diferente, mas olha soh... uma enquete, tem somente uma pergunta, certo? então o relacionamento de uma enquete eh 1:1 (um para um) sendo assim não há necessidade de separar as tabelas, entende?

bom o sql eu fiz com base nesta idéia... se for diferente eh soh vc adaptar....

a primeira query adiciona a chave estrangeira para a tabela enquete, se o usuário da tabela "usuarios" for deletado, os dados da tabela enquete tb serão deletados...

a segunda query adiciona a chave estrangeira para a tabela enquete_opcoes, se o usuário da tabela "enquetes" for deletado, os dados da tabela enquete tb serão deletados...
ALTER TABLE `enquetes`
  ADD CONSTRAINT `enquetes_ibfk_1` FOREIGN KEY (`id_usuario`) REFERENCES `usuarios` (`id_usuario`) ON DELETE CASCADE;

ALTER TABLE `enquete_opcoes`
  ADD CONSTRAINT `enquete_opcoes_ibfk_1` FOREIGN KEY (`id_enquete`) REFERENCES `enquetes` (`id_enquete`) ON DELETE CASCADE;

Edição feita por: MxDxPx, 18/08/2006, 14:59.

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#7 pgnall

pgnall

    Enable

  • Usuários
  • 383 posts
  • Sexo:Masculino
  • Localidade:http://eduardo.sganzerla.net

Posted 18/08/2006, 18:57

Hum, agora consegui entende, eu tava pensando o contrario hehe

pensava que tinha que por as duas na tabela enquetes....

quanto a tabela separada, bom não sei aonde eu tava com a cabeça, acho que foi a empolgação que eu comecei aprender a separar as tabelas :P

Valeu
Eduardo Sganzerla
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀


www.Eu Sei Escrever.com.br - Adote esta campanha!

#8 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 18/08/2006, 21:20

Relacionamento de tabelas também é possível atualizar dados em cascata, mesmo esquema só muda pra ON UPDATE ... :P
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#9 Dimitri

Dimitri

    Normal

  • Usuários
  • 97 posts
  • Sexo:Masculino

Posted 29/07/2007, 13:01

ta beleza, eu sei usar foreign keys... só que eu não to sabendo faze esse relacionamento, pois tenho pouca experiencia nisso e não consigo usar duas foreign keys na mesma tabela...


bom voce sabendo ou não tai um pekeno script com a modelagem das chaves estrangeiras... agora soh uam pergunta... poque vc tem uam tabela enquete e dai tem uam tabela enquete_pergunta e outra enquete_opcoes... naum sei se vc pensou diferente, mas olha soh... uma enquete, tem somente uma pergunta, certo? então o relacionamento de uma enquete eh 1:1 (um para um) sendo assim não há necessidade de separar as tabelas, entende?

bom o sql eu fiz com base nesta idéia... se for diferente eh soh vc adaptar....

a primeira query adiciona a chave estrangeira para a tabela enquete, se o usuário da tabela "usuarios" for deletado, os dados da tabela enquete tb serão deletados...

a segunda query adiciona a chave estrangeira para a tabela enquete_opcoes, se o usuário da tabela "enquetes" for deletado, os dados da tabela enquete tb serão deletados...
ALTER TABLE `enquetes`
  ADD CONSTRAINT `enquetes_[b]ibfk_1[/b]` FOREIGN KEY (`id_usuario`) REFERENCES `usuarios` (`id_usuario`) ON DELETE CASCADE;

ALTER TABLE `enquete_opcoes`
  ADD CONSTRAINT `enquete_opcoes[b]_ibfk_1[/b]` FOREIGN KEY (`id_enquete`) REFERENCES `enquetes` (`id_enquete`) ON DELETE CASCADE;


Mas pq do ibfk_1??

#10 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 31/07/2007, 11:10

Mas pq do ibfk_1??


é simplesmente um identificador da chave estrangeira pode ter qqer nome, contanto q sejam todos diferentes....

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq