• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nokPT

Ordenar por colunas

3 mensagens neste tópico

Bom dia,

Não sei devia postar nesta secção,

Estou a fazer um programa em VB2008.NET e uma base de dados no MS SQL Server Management Studio.

Nessa base de dados vou criar uma tabela para Fornecedores, nessa tabela pretendo meter os dados básicos do fornecedor (Morada, telefone, NIF, ...)

Pretendo criar mais 2 tabela ligadas/relacionadas com essa tabela de Fornecedores: Marcas e Áreas

Dentro da tabela Marcas, pretendia criar várias colunas:

Fornecedor | AAA| DDD| BBB| ...

aaaa          | 1    | 1      | 0  | ....

bbbb          | 0    | 1      | 0  | ....

cccc            | 0    | 0      | 1  | ....

...

Dentro da tabela Área a ideia seria a mais ou menos a mesma, mas para temas tipo Cabos, Esteira, Disjuntores, ...

Um primeiro problema que se levanta é que o número de colunas (das tabelas Marcas e Áreas) vai crescendo há medida que aparece um fornecedor novo. Um dos últimos fornecedores comercializa 30 marcas diferentes ao todo (nesta fase) teremos entre 30 e 40 fornecedores diferentes.

O que pretendo é para um determinado fornecedor preencher um CheckedListBox (ou outro) com as marcas (ou áreas) comercializadas pelo fornecedor e permitir alterar (gravar na BD), naturalmente que pretendo preencher as CheckedListBox ordenada alfabeticamente.

Acho que tenho que criar duas tabelas suplementares para as marcas de cada coluna e as áreas de cada coluna, caso contrário não sei quantas colunas tem cada tabela.

Alguém tem sugestões de como fazer o que pretendo? Ou outra maneira/alternativa?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faças a BD como estás a pensar.  :D

Depois de definida a estrutura de uma tabela, esta não deve estar em constante mutação, deve ser estável.

É preferível criares 5 Tabelas ao invés de 3:

  • A fornecedores com os dados dos forncedores
  • A Marcas com um código de marca (Chave primária) e outros dados como nome
  • A Areas com um código de área (Chave primária) e outros dados como nome
  • A AreasFornecedores com duas colunas (chave primária), o código de fornecedor e o código de área
  • A AreasMarcas com duas colunas (chave primária), o código de fornecedor e o código de marca

Desta maneira é muito mais fácil de relacionar e controlar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As tabelas Marcas e Área só necessitam de uma coluna: Nome (e eventualmente a chave primária, só nunca percebi para que serve e qual a sua utilidade)

A tabela Marcas terá registos como por exemplo:

Siemens

Nokia

EPSON

etc..., etc..., etc...

A tabela Áreas terá registos como por exemplo:

Electrodomésticos

Telemóveis

Material Eléctrico

Material Infomático

Sanitas

etc..., etc..., etc...

Assim sendo e usando a tua sugestão, não criava colunas mas acrescentava (ou apagava) linhas, quer dizer que:

1º teria que preencher a CheckedListBox com as marcas (ou áreas) todas a partir da tabela correspondente e

depois tinha que, para determinado fornecedor seleccionado, testar marca a marca se existia na tabela MarcasFornecedor (ou ÁreaFornecedor)

O meu medo é: Se tiver qualquer coisa como 200 marcas (não é um número exagerado), quando selecciono um fornecedor, vou fazer 200 ligações à base de dados e correr 200 comandos SQL. Pergunta: não será demasiado pesado? Os fornecedores vão estar numa TreeView (ordenados alfabeticamente, nesta fase, e por marcas ou áreas numa fase posterior), cada vez que o utilizador carregar para cima ou para baixo ou seleccionar um fornecedor na TreeView, o programa vai executar N ligações à base de dados e correr N comandos SQL, vai ser problemático ou estou a duvidar das capacidades do SQL (e do VB)?

0

Partilhar esta mensagem


Link 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