1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Help:P

Discussão em 'Programação' iniciada por layker, 12 de Setembro de 2008. (Respostas: 14; Visualizações: 842)

  1. Boas sou novo por estas bandas mas estou enrascado em sql.
    como posso acrescentar uma coluna sexo da tabela alunos(texto,1caracter) de forma a so aceitar dois tipos de dados "M" ou "F"
     
  2. _freelancer_

    _freelancer_ Power Member

    Normalmente os SGBD têm um tipo de dados ENUM, mas talvez para melhor performance queiras ter algo do tipo boolean ou bit (true/false, ou 1/0) a não ser que queiras ter um valor para indefinido. Pode ser útil por vezes...
     
  3. O meu interesse é so para que a tabela aceita no campo sexo F ou M e k n aceita mais nenhum valor.
     
  4. _freelancer_

    _freelancer_ Power Member

    Se queres algo mais concreto, convém mencionar o teu SGBD... MySQL? PostgreSQL? SQL Server? Oracle?
     
  5. tou a usar o sql no acess
     
  6. Mavors

    Mavors Power Member

    Mas queres que a coluna de sql só aceite esses dois tipos de dados?...

    Ou metes booleano em que 0=M e 1=F e fazes a descodificação num passo intermédio, ou então validas os dados de Input e defines como char(1) na DB.
     
  7. fLaSh_CF

    fLaSh_CF Banido

    Crias tipo uma Table "Sexo" Field "Tipo"
    E inseres manualmente dois registos.. M e F, depois fazes "relacion ships" ao respectivo campo na tabela pretendida.. isto permitirá apenas adicionar o caracter existentes na tabela "Sexo" ;-)

    Fica bem :)
     
  8. ja tenho definido como 1 char apenas.mas queria que ele so aceita-se o F e o M. apenas e mais nenhum caracter isto apos colocar a coluna sexo.

    assim dava mas o prof quer que faça isto td a pata..no sql numa so instroçao lg tou nicado mxm:S
     
    Última edição pelo moderador: 12 de Setembro de 2008
  9. Mavors

    Mavors Power Member

    Acho que não vale a pena criar uma tabela relacional por causa de dois valores. Vais ter 'M' e 'F' que ocupa tanto espaço com '0' e '1' e a não ser que faças descodificação automática para 'Masculino' e 'Feminino' não faz sentido teres uma tabela de parametros só para isso. Assim escreves directamente, é transparente e evitas mais uma tabela.

    Agora possibilitar apenas M e F tens de fazê-lo no Input e não na tabela.
     
  10. Bem acho que ja me desenrasquei obrigado a tds [[]]
     
  11. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    E como te desenrascaste?
    Dá sempre jeito dar a resposta no tópico, para referência futura :)
     
  12. AliFromCairo

    AliFromCairo Power Member

    Bom, a resposta depende sempre do SGBD que estiver a ser utilizado. De qualquer forma, a maneira mais simples de se fazer isso é utilizando o ENUM (MySQL) ou o CHECK na grande maioria dos SGBD's (MSSQL, Oracle, entre outros possivelmente). Se nada disto estiver disponível, existe quase sempre a hipótese de se criar um Trigger que aborta a transacção (embora nestes casos, eu aconselhe vivamente a mudar de SGBD).

    Em relação a criar uma tabela para representar o sexo de uma pessoa, dizer que é overkill é um eufemismo.
     
  13. fLaSh_CF

    fLaSh_CF Banido

    lol que queres dizer com isso? ..não disse que era o melhor procedimento, mas funciona..
     
  14. MPalhas

    MPalhas Power Member

    o que ele quer dizer é que overkill até é um nome levezinho para chamar a isso.

    repara, se crias uma tabela para isso, ela seria:

    Código:
    ID    DESCRIÇÃO
    1     Masculino
    2     Feminino
    e depois das outras tabelas em vez de referires explicitamente o sexo, referes só o ID

    para implementar isso vais ter, sempre que quiseres saber o sexo de uma pessoa, usar duas tabelas (a original e esta), saber o ID correspondente ao sexo do registo em questão, procurar o correspondente nesta segunda tabela (é pequena sim, mas tens sempre que fazer a comparação) e finalmente receber o valor correspondente da descrição

    para que tanto trabalho e desperdicio de recursos quando podes apenas, na tabela original criar um campo com um caracter, e guardar lá o valor M ou F (ou 0 e 1 se preferires)?

    a não ser que saibas de fonte segura que a evolução está prestes a criar um novo sexo (:p), não vejo vantagem nenhuma na tabela nova. nem sequer te dá menos trabalho, se não ainda se compreendia
     
  15. fLaSh_CF

    fLaSh_CF Banido

    Yah.. mas a ideia seria "forçar" validação "M" ou "F" .. :)

    Sem duvida que o que o AliFromCairo disse, é a melhor forma..
     

Partilhar esta Página