Ir para o conteúdo
NelsonBN

Relacionar tabelas...

Mensagens Recomendadas

NelsonBN

Olá boa tarde... estou aqui com uma duvida... e gostaria de saber se alguém me consegue ajudar a arranjar uma solução...

Eu tenho este modelo Entidade Relação e queria-o passar pasa SQL:

duvidat.jpg

Uploaded with ImageShack.us

o modelo relacional ficaria algo assim

Facturas(NrFacturas, etc...)

LinhasFacturas(IDLinha, NrFacturas, IDProduto, etc...)

Produtos(IDProduto, Marca, Modelo, Preço)

Computador(IDComputaodr, Disco, Processador, Memoria, etc...)

Impressora(IDImpressora,Tipo,Nr_Tinteiros, etc...)

então eu queria garantir a correcta relação de todos os dados da minha base de dados, e como tal estava a pensar usar "foreign key"...

mas o meu problema está na tabela produtos... eu queria adicionar dois atributos na tabela produtos (IDSubProduto, TipoProduto)

Produtos(IDProduto, Marca, Modelo, Preço, IDSubProduto, TipoProduto)

e conforme o tipo de produto, eu relacionava a linha correspondente a esse produto com a tabela computador ou impressora...

mas é impossível fazer um "Foreign key" do mesmo atributo para tabelas diferentes, certo?

como posso garantir que para inserir um registo na tabela produtos o valor do campo IDSubProduto tenha que existir na tabela computadores ou impressoras???

agradeço desde já a ajuda...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

uma solução é tornar as tabelas "computador" e "impressoras" a mesma tabelas : "produtos"

deste modo tens o problema resolvido


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NelsonBN

uma solução é tornar as tabelas "computador" e "impressoras" a mesma tabelas : "produtos"

deste modo tens o problema resolvido

pois essa era a ultima hipótese que eu queria tomar... porque como se pode ver no modelo entidade relação, campos em comum em abas as tabelas impressoras e computadores, e esses campos ficam na tabela produtos. mas as tabelas impressoras e computadores tem campos diferentes, e como tal queria separar tudo pelas respectivas tabelas....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NelsonBN

não tens nas tabelas "computadores" e "impressoras" um campo "IDProduto" ?

a relação deveria ser feita desse modo ...

pois mas ao fazer dessa forma, não consigo garantir que um determinado IDProduto seja só impressora ou só computador... como referiste agora um IDProduto pode ser os dois ao mesmo tempo....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

o que estou a dizer é que o IDProduto é uma referência para "produto" e não para "computador" ou "impressora"

claro que pode ser para um produto que na sua extensão é um computador ou impressora, mas isso é trabalho da aplicação e não da base de dados ...

ou então tira a coluna IDSubProduto da Tabela "produto" e adiciona uma coluna "IDSubComputador" à tabela "computador" e uma IDSubImpressora" à tabela "impressora"


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NelsonBN

desculpa lá a minha insistência... ontem depois de alguma pesquisa encontrei uma sintaxe SQL "CREATE ASSERTION"... Depois de ver a funcionalidade dessa sintaxe, quase dei um pulo da cadeira de felicidade (LOLOL)... o pior foi quando tentei por mãos a obra. Nada feito..

corrijam-me se estiver enganado. O "CREATE ASSERTION" não faz parte da linguagem SQL do MySQL? e caso não faça parte, será que existem alguma sintaxe SQL que faça algo muito semelhante?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.