Help:P

layker

Membro
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"
 
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...
 
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.
 
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:
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"

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.
 
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.
 
lol que queres dizer com isso? ..não disse que era o melhor procedimento, mas funciona..

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
 
Back
Topo