Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

HSilva

Herança de FOREIGN KEY no diagrama

Recommended Posts

Olá Galera! Salve!

 

Sou novo no fórum e novo em modelagem.

Peço uma ajuda para entender uma coisa. Pesquisei, mas não achei.

 

Estou aprendendo MySQL, e já fiz trabalhos básicos para a facu.

 

Notei uma coisa, usando o DBDesigner e o Workbench 5: quando eu faço relacionamentos entre 3 ou mais tabelas, elas vão "herdando" as Foreign keys de outras tabelas (nao necessárias) como no exemplo a seguir:

 

1- Aqui só preciso de:

 

a - O idtipo.tipoUsuario como foreign key em usuario - ok está certo

b - O idUsuario.usuario como foreign key em locDomicilio - aí neste caso o diagrama herda a foreign kei da table tipoUsuario (coisa que eu nao quero).

 

Pergunto:

Isso é padrão? É o correto?

Ou eu que tenho o conhecimento errado? Pois que basicamente aprendi é que preciso apenas da foreign key que vou usar e não daquelas que estão sendo herdadas da tabela anterior...deu pra entender a dúvida? heheh http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

sugiro re-estruturar as tabelas

 

Na tabela "usuario", está incluindo campos para endereço, contato, etc.

 

Sugiro separar os detalhamentos para tornar o sistema flexível.

 

exemplo

 

Person
   ID
   Name
   Surname
   BirthDate
   Genre

 

Address
   ID
   PersonID
   Country
   PostalCode
   Province
   City
   Local
   LocalAdd
   Attribute

 

Contact
   ID
   PersonID
   Email
   Number
   Type
   Attribute

 

PersonDetail
	IDPerson
	AccountType

 

 

 

 

obs: Saliento que é apenas um exemplo ilustrativo a caráter de aprendizado.

Não quer dizer que seja o método correto ou que seja o melhor método.

A escolha de métodos varia de acordo com as necessidades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sugiro re-estruturar as tabelas

 

Na tabela "usuario", está incluindo campos para endereço, contato, etc.

 

Sugiro separar os detalhamentos para tornar o sistema flexível.

 

exemplo

 

Person
   ID
   Name
   Surname
   BirthDate
   Genre

 

Address
   ID
   PersonID
   Country
   PostalCode
   Province
   City
   Local
   LocalAdd
   Attribute

 

Contact
   ID
   PersonID
   Email
   Number
   Type
   Attribute

 

PersonDetail
	IDPerson
	AccountType

 

 

 

 

obs: Saliento que é apenas um exemplo ilustrativo a caráter de aprendizado.

Não quer dizer que seja o método correto ou que seja o melhor método.

A escolha de métodos varia de acordo com as necessidades.

Olá! Obrigado pela dica Hinom, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Entendi sua dica! Mas a dúvida é quanto ao diagrama do Workbench, se é normal ele herdar oas foreign keys de outras tabelas nao diretamente relacionadas. :mellow:

 

Valeu! Aguardo!

 

E parabéns pelo Fórum tem muitos recursos interessantes aqui no iMasters.

 

ABC

Compartilhar este post


Link para o post
Compartilhar em outros sites

O MySQL Workbench não cria indexações automaticamente.

Precisa que sejam especificadas.

 

Qual versão está usando ?

 

 

Fiz um teste rápido com a versão 5.0 e não vi nenhuma "anormalidade"

 

Imagem Postada

 

 

SQL

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `mydb`;

-- -----------------------------------------------------
-- Table `mydb`.`table1`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`table1` (
  `id` INT NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`table2`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`table2` (
  `idtable2` INT NOT NULL ,
  `id`  NOT NULL ,
  PRIMARY KEY (`idtable2`) ,
  INDEX `id` (`id` ASC) ,
  CONSTRAINT `id`
	FOREIGN KEY (`id` )
	REFERENCES `mydb`.`table1` (`id` )
	ON DELETE NO ACTION
	ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`table3`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`table3` (
  `idtable3` INT NOT NULL AUTO_INCREMENT ,
  `id` INT NOT NULL ,
  PRIMARY KEY (`idtable3`) )
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Galera! Salve!

 

Sou novo no fórum e novo em modelagem.

Peço uma ajuda para entender uma coisa. Pesquisei, mas não achei.

 

Estou aprendendo MySQL, e já fiz trabalhos básicos para a facu.

 

Notei uma coisa, usando o DBDesigner e o Workbench 5: quando eu faço relacionamentos entre 3 ou mais tabelas, elas vão "herdando" as Foreign keys de outras tabelas (nao necessárias) como no exemplo a seguir:

 

1- Aqui só preciso de:

 

a - O idtipo.tipoUsuario como foreign key em usuario - ok está certo

b - O idUsuario.usuario como foreign key em locDomicilio - aí neste caso o diagrama herda a foreign kei da table tipoUsuario (coisa que eu nao quero).

 

Pergunto:

Isso é padrão? É o correto?

Ou eu que tenho o conhecimento errado? Pois que basicamente aprendi é que preciso apenas da foreign key que vou usar e não daquelas que estão sendo herdadas da tabela anterior...deu pra entender a dúvida? heheh http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

Imagem Postada

 

então.. acontece que para criar as chaves estrangeiras você ta usando a opção relação identificável(não se é essa a palavra "Identifying Relationship") que além de criar uma chave estrangeira ainda a transforma em chave primaria da tabela filha, você tem q usar a opção de Non-Identifying Relationship!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Cabrinha,

 

Obrigado por compartilhar seu conhecimento conosco.

 

Continue contribuindo respondendo os tópicos mais recentes.

 

Abraços

 

Mário Monteiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.