Failed to load libGL.so no Linux

Olá para todos. Esta pequena solução é para quem está começando a programar para Android.

fonte: http://mastigado.wordpress.com

Ocorre geralmente quando estou tentando iniciar um emulador do Android. Pois bem, sem muita firula, você pode fazer o seguinte:

Primeiro, você deve procurar pela biblioteca libGL.so no seu Linux.

  1. Dê um updatedb para atualizar seu arquivo database;
  2. Depois dê um locate libGL.so;
  3. Algo parecido com isso pode aparecer:

/usr/lib/i386-linux-gnu/libGL.so.1

/usr/lib/i386-linux-gnu/libGL.so.1.2

Segundo, você deverá criar um link simbólico desta biblioteca para dentro da pasta lib do seu SDK Android. Você pode fazer algo como isto:

ln -s /usr/lib/i386-linux-gnu/libGL.so.1 /opt/android-sdk-linux/tools/lib/libGL.so

Pronto! Resolvido.

fonte: http://stackoverflow.com/questions/11332817/failed-to-load-libgl-so-in-android

Instalar plugin Java no Firefox para acessar sites de banco no Linux

fonte: http://mastigado.wordpress.com

Esta é uma dica muito simples, mas para quem sempre tem de sempre instalar e reinstalar o Java(o bendito Java) no Linux, sabe que é um saco acessar sites de banco(Banco do Brasil, Caixa, Santander, Bradesco, etc) neste SO. Bem, a dica é bem simples.

  1. Você deverá ir no site http://www.java.com e baixar a versão para o seu Linux(pode ser 32 ou 64 bit). Não precisa baixar o pacote rpm, baixe o tar.gz mesmo.
  2. Depois descompacte(tar -zxvf o_seu_jre.tar.gz) o seu conteúdo dentro da pasta /usr/local. Bem, eu descompactei lá e funcionou! Então, ficará algo como isto: /usr/local/o_pacote_jre_sei_la_de_que_versao.
  3. Bem, vou supor que você tenha o Firefox instalado, tanto por ter descompactado a pasta em tar.gz ou tenha-o instalado de alguma outra forma. Pois bem, basta você ir até o diretório /usr/lib/mozilla/plugins(se não existir, crie) e criar um link simbólico lá dentro para determinada biblioteca do Java conforme orientação de instalação no site do Java. Pronto! Você provavelmente irá conseguir acessar o seu site de banco agora.
  4. E para finalizar(isso é muito importante para usuários do Linux), se você quiser que o seu Firefox tenha a opção de atualizar automaticamente habilitada, torne o seu usuário dono de seu diretório, da maneira abaixo:

chown seuusuario:seuusuario -R /nome_da_sua_pasta_do_firefox

Sim! É mole fazer isso, mas é chato ter de lembrar disso toda a vez que você tem que reinstalar um Linux em algum lugar do mundo. Tanto que estou usando o Debian Wheezy e esta dica funciona pra Slackware, Fedora ou qualquer outra distro Linux.

fonte: http://mastigado.wordpress.com

fonte: http://davelargo.blogspot.com.br/2013/05/firefox-21-changed-plugins-folder.html

Liberando seu MySQL para acesso externo

Olá para todos.

Hoje, vou deixar uma dica básica, mas que serve para galera que precisa o banco de dados MySQL externamente(noLinux de preferência).

Sabe aquela hora em que você já preparou seu banco de dados perfeitamente e precisar conectar seu sistema que não está na mesma máquina  em que se encontra o banco de dados? Pois bem, você vai precisar fazer uma pequena alteração em um arquivo do MySQL(aliás, praticamente finado MySQL, pois a Oracle não curte este negócio de free ou open source).

fonte: http://mastigado.wordpress.com

– Você deve ir até o arquivo my.cnf que pode estar em /etc/mysql/my.cnf e editar este arquivo, mas, você pode dar um updatedb e em seguida um locate my.cnf, pois pode ser que esteja em outro lugar.

– Dentro deste arquivo, existe um parâmetro chamado bind-address que deverá ser alterado para como está abaixo.

bind-address = 0.0.0.0

– Lembre-se que você deverá reiniciar o serviço do MySql logo em seguida para confirmar se surtiu efeito. Para executar este comando você pode digitar no console(mas pode ser que o comando mude):

/etc/init.d/mysql restart

– Se ainda assim não rolar, libere a porta 3306(padrão do MySql) no seu firewall(se ele estiver ativo, claro). Primeiro execute uma linha e depois a outra.

iptables -t filter -A INPUT -p tcp –dport 3306 -j ACCEPT

iptables -t filter -A INPUT -p udp –dport 3306 -j ACCEPT

– E por último, para se conectar no MySql, digite:

mysql -U root -p

E execute:

grant all privileges on *.* to ‘[usuario]‘@’%’ identified by ‘[senha]‘;

Olha, esta informação eu peguei no blog abaixo e dei uma incrementada, que por sinal estava muito bem explicada.

fonte: http://www.cjdinfo.com.br/solucao-my-sql-liberar-acesso-remoto-ao-mysql

fonte: http://mastigado.wordpress.com

Alterar campos no banco de dados para ser replicado em seu edmx

Olá pessoal,

Enquanto programo em C# utilizando edmx(usando model-fist) e não code-first, às vezes ocorrem algumas inconveniências quando preciso alterar um atributo da classe no banco, ou simplesmente excluir um campo no banco de dados. Em vista disso, vou deixar aqui como costumo fazer estes procedimentos de uma forma que eles realmente funcionem como espero. Vamos lá então.

fonte: http://mastigado.wordpress.com

Para alterar o tamanho do campo

alter table teste alter column nome char(1) not null

Para inserir uma nova coluna no banco

alter table teste  add minhacoluna varchar(60) null

Para excluir uma coluna no banco

alter table teste drop column telefone varchar(15) null

Em seguida, abra o seu modelo edmx no Visual Studio e clique com o botão direito na área branca. No menu que irá surgir, clique em Update Model from Database.

Algumas considerações importantes sobre o mapeamento do edmx

  • Se você incluir uma nova coluna, basta executar o Update Model from Database que ele irá puxar os campos adicionados em seu banco e replicar no seu modelo.
  • Se você alterar um campo no seu banco e executar o Update Model from Database no seu edmx, ainda assim, será necessário alterá-lo manualmente no edmx.
  • Se você exclui uma coluna do banco e em seguida, executar Update Model from Database, receberá um erro informando que a tabela não foi mapeada. No exemplo abaixo, excluí a coluna telefone do meu banco e mandei atualizar no edmx.

Error 11009: Property ‘telefone’ is not mapped.

O campo que existia no banco de dados e que estava mapeado no edmx, deverá agora ser excluído manualmente no seu mapeamento edmx, após a exclusão do campo no banco.

fonte: http://mastigado.wordpress.com

ASP.Net Erros indesejáveis

Olá pessoal.

Para quem está acostumado a programar em php, python e utilizar Apache ou Nginx sabe que quando o seu servidor(Linux) sofre um pique de energia ou um desligamento inesperado, basta ligá-lo novamente e deixar que o próprio sistema operacional faça sua checagem de sistema de arquivos na sua inicialização. Então, depois de iniciar novamente, você percebe que seu Apache, Cherokee, Gunicorn ou Nginx continuam funcionando normalmente. Até o mais cabuloso pau no sistema de arquivos, a ponto de você ter de restaurá-lo, não irá danificar seus programas e você que programa na plataforma LInux, sabe disso, a não ser, claro, que seu HD tenha ido para o saco. MAS, isto não acontece sempre com o nosso amiguinho (Ru)Windows. Com certeza. O que você ganha em produtividade utilizando o Visual Studio programando em C#, você perde ficando refém deste sistema operacional. Então, para tentar me lembrar do que tenho que fazer quando ocorre um probleminha deste tipo(alguém tropeçou no fio e meu pc desligou, e depois que liguei novamente, corrompeu tudo), vou tentar fazer um tópico permanente dos erros que eu for encontrando e vou colocando aqui, para eu poder me lembrar de como proceder e para ajudar outros desesperados.

Então, vamos lá.

fonte: http://mastigado.wordpress.com

Erro 1:

antlr3.runtime’ could not be loaded ou Rastreamento do Carregamento de Assembly: As informações a seguir podem ser úteis para determinar por que o assembly ‘Antlr3.Runtime’ não pôde ser carregado.

Quando e como ocorreu:

Estava programando no Visual Studio e meu estabilizador desligou, então liguei o pc novamente e continuei a programar. Em seguida, ele desligou novamente, daí quando religuei o pc e voltei a programar, quando fui testar meu programa em ASP.Net dentro do Visual Studio, ao abrir o browser dei de cara com a tela abaixo.

Erro antlr3

antlr3.runtime’ could not be loaded

Como foi resolvido:

Abri o console do Nuget(Package Manage Console) no Visual Studio e digitei install-package antlr. Pronto, resolveu.

Erro 2:

Tentei fazer login em um sistema que já estava hospedado, mas que eu tinha acabado de refazer o seu banco de produção.

Quando e como ocorreu:

Após ter refeito o banco de dados que o meu sistema hospedado tentou acessar.

nao_e_possivel_autenticar

Não é possível autenticar no sistema

Como foi resolvido:

Fui em tabela por tabela do banco e refiz as suas permissões originais.

fonte: http://mastigado.wordpress.com

Um objeto com a mesma chave já existe no ObjectStateManager

Sim pessoal, o título pode parecer meio estranho, mas isto pode um dia acontecer com você.

Você pode em algum momento estar programando em C# e de repente, quando tenta atualizar um objeto, um erro como este surge em seu Visual Studio

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key

Pode até soar estranho, se como eu, você trabalha com níveis de permissões de usuário e precisa em algum momento, alterar a permissão de acesso de um deles, mas quando menos se espera, é surpreendido por uma mensagem dizendo que já existe um objeto com a mesma chave no ObjectStateManager.

fonte: http://mastigado.wordpress.com

Para quem não sabe, segundo definição da Microsoft, o ObjectStateManager, Obtém o Gerenciador de estado de objetos usado pelo contexto do objeto para controlar alterações do objeto.

Mas enfim, procurei várias alternativas para resolver este erro, porém, somente em um site encontrei uma resposta suficientemente simples para eu poder reproduzir abaixo seu post, muito bem mastigado.

O problema surge a partir do modo como o ObjectContext funciona. Em condições normais, a store do ObjectContext guarda em seu cache uma instância(e apenas uma) da classe ObjectStateEntry para cada entidade. Isso significa que não podemos ter mais de uma entidade(exemplo: registro) com a mesma chave no cache.

Mesmo que isto pareça ser óbvio, em algumas circunstâncias, este não é o comportamento que queremos. Contudo, podemos resolver o problema de diferentes maneiras. Aqui nós fornecemos um truque.

Vamos começar por reproduzir o problema(me desculpe se o exemplo a seguir é tão trivial, mas o único objetivo é reproduzir o erro):


TestMVCEntities db = new TestMVCEntities();

News testNews = new News();

testNews.NewsID = 1;

db.News.Attach(testNews);

News testNews2 = new News();

testNews2.NewsID = 1;

db.News.Attach(testNews2);

Quando executarmos esse código, teremos o erro An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key. Isso porque nós demos um Attach(anexamos) num contexto da mesma entidade(observe a chave(key)).

Uma maneira fácil de impedir este problema é utilizarmos dois diferentes contextos. Olhe para este código:


TestMVCEntities db = new TestMVCEntities();

TestMVCEntities db2 = new TestMVCEntities();

News testNews = new News();

testNews.NewsID = 1;

db.News.Attach(testNews);

News testNews2 = new News();

testNews2.NewsID = 1;

db2.News.Attach(testNews2);

Neste último trecho de código, nós usamos dois contextos diferentes que têm dois caches diferentes. É por isso que não temos qualquer erro.

fonte: http://library.logicsistemi.it/en/net/general-topics/81-an-object-with-the-same-key-already-exists-in-the-objectstatemanager

fonte: http://mastigado.wordpress.com

03 – Criando um aplicação completa em Asp.Net/MVC 4 e ExtJS 4 – Modelo Lógico, Normalização de Dados(Formas Normais) e criação de banco em SQL Server e MySQL

Seguindo a sequência dos posts, vou deixar aqui o nosso modelo lógico de forma ilustrada para que possamos visualizar melhor o que aconteceu até agora.

fonte: http://mastigado.wordpress.com

Modelo Lógico

Modelo Lógico -- GPA

Modelo Lógico — GPA

Utilizei o programa Oracle SQL Developer Data Modeler para gerar este modelo. Vocês podem baixar este programa no site da Oracle e utilizar a vontade, pois ele é free e para executá-lo, você também deve ter o Java 7 instalado.
Para criar este modelo utilizei-me das formas normais, abaixo.

Normalização de Dados(Formas Normais)

– Forma Normal diz que Todos os atributos admitem apenas valores atômicos, isso quer dizer que não permite não permite atributos multi valorados em seu grupo. Tive de aplicar um usuário pode ter apenas um Status(Ativo ou Inativo) ou ser de um Tipo de Usuário(Admin ou Usuário Comum);

– Forma Normal diz que Cada atributo não chave é dependente de toda a chave primária. Bem, nesta eu pensei que com a ilustração abaixo conseguisse exemplificar melhor porque no meu exemplo acima encontrei um pouco de dificuldade para falar sobre. No caso abaixo existe uma tabela com 3 chaves(cod_forn, cod_prod e cod_ped) que cria uma dependência de outras tabelas que estão ligadas a ela. No caso abaixo, imagine como seria a situação quando campo cod_prod sofrer uma alteração.

2ª forma normal

2ª forma normal

E assim, na parte mais baixa da figura, a 2ª forma normal é aplicada e os atributos que não são chave, ficam apenas dependentes do que é realmente sua chave primária.

– Forma Normal diz que Cada atributo não chave é dependente não transitivo da chave primária.  Esta diz que para estarmos na 3ª forma normal, antes de tudo deveremos estar na 2ª forma normal e assim depois aplicar a terceira. Para o nosso exemplo, é como se eu tivesse:

  • Uma tabela chamada Municipio_Bairro com os campos codigo_municipio, descricao_municipio e descricao_bairro.

Quando deveriam ser 2 tabelas desta forma:

  • Uma tabela Municipio com os campos codigo_municipio, descricao_municipio e
  • Uma tabela Bairro com os campos codigo_bairro, descricao_bairro e codigo_municipio.

4ª – Forma Normal diz que Uma linha não deve conter dois ou mais fatos de valores múltiplos independentes sobre uma entidade. Bem, pelo que andei lendo, as quartas e quintas formas normais lidam com fatos multivalorados, onde O fato multivalorado pode corresponder a um relacionamento muitos-para-muitos, como funcionários e habilidades, ou a um relacionamento muitos-para-um, como com filhos de um funcionário (assumindo que apenas um dos pais é funcionário). “Muitos-para-muitos” significa que um funcionário possui várias habilidades, e uma habilidade pode pertencer a vários funcionários.

No nosso caso, entendi que um usuário pode prestar serviços de várias modalidades e uma modalidade de serviços pode conter vários usuários que estejam habilitados para ela, por isso temos aí uma relação de N para N. E quando temos uma relação de N para N, devemos colocar uma chamada entidade fraca entre esta relação de entidades.

Repare que dentro da entidade Usuario, eu não tenho nenhum vínculo com a entidade(tabela) Modalidade e vice-versa, por isso, criamos um entidade fraca com o nome de Modalidade_Usuario que carrega as chaves primárias das duas entidades, porém nesta nova entidade, as minhas chaves são do tipo Foreign Key(Chave Estrangeira). Mas isto não quer dizer que uma entidade fraca não possa ter além disso uma chave primária e outros campos não chave.

Criação de banco em SQL Server e MySQL

Aproveitei a oportunidade e criei um script para criação de banco tanto para o SQL Server, quanto para o MySQL. Se você reparar bem, verá que não há muita diferença entre os dois. Consulte os scripts do SQL Server e do MySQL que estão no final do post para entender o que é explicado abaixo.

  • Na declaração de chave primária do SQL Server, eu pude dizer que esta chave vai de 1 em 1(1, 2, 3…7,8,9,10…) e já no do MySQL, eu não me lembro desta opção(nem sei se existe).
  • No MySQL coloquei a cláusula IF NOT EXISTS antes da criação da tabela, porque ele tenta criar a tabela se ela não existir, enquanto roda o script. Já no SQL SERVER, esta opção não funcionou para mim(devo ter feito algo errado na sintaxe).
  • No SQL Server utilizei um padrão que segundo um amigo meu é boa prática o fato de utilizar na identificação da chave primária ou estrangeira um padrão de nomenclatura. Ainda segundo ele, o próprio SQL Server entende este padrão. Para chave primária, utilizamos a identificação do tipo de chave(neste caso, PK), depois o nome da tabela que contém a chave primária e por fim, o nome do campo que será a chave primária, como neste exemplo PK_GPA_Usuario_cd_usuario. Já para a chave estrangeira, o padrão é o identificador do tipo de chave(neste caso, FK), depois o nome da tabela(ou entidade) que contém a chave estrangeira, seguido da tabela que contém a chave primária que a chave estrangeira faz referência e por fim, o nome do campo que será a chave estrangeira, como neste exemplo FK_GPA_Usuario_GPA_Status_cd_status. No MySQL, eu repliquei isso para ficar padrão.
  • Mesmo sendo possível já definir as chaves estrangeiras dentro da criação das tabelas, isto não é uma boa prática porque se você criar este relacionamento entre elas logo em sua criação, pode ser(e é bem provável que isto aconteça), que na hora da execução do seu script, alguma tabela não seja criada por conta de fazer uma referência a uma tabela que ainda não foi criada, pois o seu script começa a executar de cima para baixo. Portanto, para não ter esta dor de cabeça, ainda mais quando se tem um sistema com 100 tabelas, construa os relacionamentos sempre no final de seu script com o comando ALTER TABLE, que já está aí mastigadinho.

Bem, os scripts seguem abaixo.

Se você for criar um banco no SQL Server, poderá utilizar o script abaixo.


use GPA
go

begin tran

CREATE TABLE GPA_Tipo_Usuario (
tp_usuario          integer not null identity(1,1),
ds_tp_usuario       varchar(30) not null,
CONSTRAINT          PK_GPA_Tipo_Usuario_tp_usuario PRIMARY KEY(tp_usuario)
);

CREATE TABLE GPA_Status (
cd_status           integer not null identity(1,1),
ds_status           varchar(30) not null,
CONSTRAINT          PK_GPA_Status_cd_status PRIMARY KEY(cd_status)
);

CREATE TABLE GPA_Modalidade (
cd_modalidade       integer not null identity(1,1),
ds_modalidade       varchar(20) not null,
CONSTRAINT          PK_GPA_Modalidade_cd_modalidade PRIMARY KEY(cd_modalidade)
);

CREATE TABLE GPA_Usuario (
cd_usuario          integer not null identity(1,1),
nome                varchar(60) not null,
login               varchar(20) not null,
senha               varchar(15) not null,
dt_expira           datetime not null,
email               varchar(40),
cd_status           integer not null,
tp_usuario          integer not null,
CONSTRAINT          PK_GPA_Usuario_cd_usuario PRIMARY KEY(cd_usuario)
);

CREATE TABLE GPA_Modalidade_Usuario (
cd_modalidade       integer not null,
cd_usuario          integer not null
);

CREATE TABLE GPA_Solicitacao (
cd_solicitacao      integer not null identity(1,1),
titulo                varchar(100) not null,
ds_solicitacao      varchar(1000) not null,
data                date not null,
cd_usuario          integer not null,
CONSTRAINT          PK_GPA_Solicitacao_cd_solicitacao PRIMARY KEY(cd_solicitacao)
);

CREATE TABLE GPA_Resposta (
cd_resposta         integer not null identity(1,1),
ds_resposta         varchar(1000) not null,
data                date not null,
cd_usuario          integer not null,
cd_solicitacao      integer not null,
CONSTRAINT          PK_GPA_Resposta_cd_resposta PRIMARY KEY(cd_resposta)
);

ALTER TABLE GPA_Modalidade_Usuario ADD CONSTRAINT FK_GPA_Modalidade_Usuario_GPA_Modalidade_cd_modalidade FOREIGN KEY (cd_modalidade) REFERENCES GPA_Modalidade(cd_modalidade);
ALTER TABLE GPA_Modalidade_Usuario ADD CONSTRAINT FK_GPA_Modalidade_Usuario_GPA_Usuario_cd_usuario FOREIGN KEY (cd_usuario) REFERENCES GPA_Usuario(cd_usuario);

ALTER TABLE GPA_Solicitacao ADD CONSTRAINT FK_GPA_Solicitacao_GPA_Usuario_cd_usuario FOREIGN KEY (cd_usuario) REFERENCES GPA_Usuario(cd_usuario);

ALTER TABLE GPA_Usuario ADD CONSTRAINT FK_GPA_Usuario_GPA_Tipo_Usuario_tp_usuario FOREIGN KEY (tp_usuario) REFERENCES GPA_Tipo_Usuario(tp_usuario);
ALTER TABLE GPA_Usuario ADD CONSTRAINT FK_GPA_Usuario_GPA_Status_cd_status FOREIGN KEY (cd_status) REFERENCES GPA_Status(cd_status);

ALTER TABLE GPA_Resposta ADD CONSTRAINT FK_GPA_Resposta_GPA_Usuario_cd_usuario FOREIGN KEY (cd_usuario) REFERENCES GPA_Usuario(cd_usuario);
ALTER TABLE GPA_Resposta ADD CONSTRAINT FK_GPA_Resposta_GPA_Solicitacao_cd_solicitacao FOREIGN KEY (cd_solicitacao) REFERENCES GPA_Solicitacao(cd_solicitacao);

commit

E caso for utilizar no MySQL, poderá utilizar o script abaixo.

CREATE SCHEMA IF NOT EXISTS `gpa`;
USE `gpa`;

CREATE TABLE IF NOT EXISTS  GPA_Tipo_Usuario (
tp_usuario          integer not null AUTO_INCREMENT,
ds_tp_usuario       varchar(30) not null,
PRIMARY KEY(tp_usuario)
);

CREATE TABLE IF NOT EXISTS  GPA_Status (
cd_status           integer not null AUTO_INCREMENT,
ds_status           varchar(30) not null,
PRIMARY KEY(cd_status)
);

CREATE TABLE IF NOT EXISTS  GPA_Modalidade (
cd_modalidade       integer not null AUTO_INCREMENT,
ds_modalidade       varchar(20) not null,
PRIMARY KEY(cd_modalidade)
);

CREATE TABLE IF NOT EXISTS  GPA_Usuario (
cd_usuario          integer not null AUTO_INCREMENT,
nome                varchar(60) not null,
login               varchar(20) not null,
senha               varchar(15) not null,
dt_expira           datetime not null,
email               varchar(40),
cd_status           integer not null,
tp_usuario          integer not null,
PRIMARY KEY(cd_usuario)
);

CREATE TABLE IF NOT EXISTS  GPA_Modalidade_Usuario (
cd_modalidade       integer not null,
cd_usuario          integer not null
);

CREATE TABLE IF NOT EXISTS  GPA_Solicitacao (
cd_solicitacao      integer not null AUTO_INCREMENT,
titulo                varchar(100) not null,
ds_solicitacao      varchar(1000) not null,
data                date not null,
cd_usuario          integer not null,
PRIMARY KEY(cd_solicitacao)
);

CREATE TABLE IF NOT EXISTS  GPA_Resposta (
cd_resposta         integer not null AUTO_INCREMENT,
ds_resposta         varchar(1000) not null,
data                date not null,
cd_usuario          integer not null,
cd_solicitacao      integer not null,
PRIMARY KEY(cd_resposta)
);

ALTER TABLE  GPA_Modalidade_Usuario ADD CONSTRAINT FK_GPA_Modalidade_Usuario_GPA_Modalidade_cd_modalidade FOREIGN KEY (cd_modalidade) REFERENCES GPA_Modalidade(cd_modalidade);
ALTER TABLE  GPA_Modalidade_Usuario ADD CONSTRAINT FK_GPA_Modalidade_Usuario_GPA_Usuario_cd_usuario FOREIGN KEY (cd_usuario) REFERENCES GPA_Usuario(cd_usuario);

ALTER TABLE  GPA_Solicitacao ADD CONSTRAINT FK_GPA_Solicitacao_GPA_Usuario_cd_usuario FOREIGN KEY (cd_usuario) REFERENCES GPA_Usuario(cd_usuario);

ALTER TABLE  GPA_Usuario ADD CONSTRAINT FK_GPA_Usuario_GPA_Tipo_Usuario_tp_usuario FOREIGN KEY (tp_usuario) REFERENCES GPA_Tipo_Usuario(tp_usuario);
ALTER TABLE  GPA_Usuario ADD CONSTRAINT FK_GPA_Usuario_GPA_Status_cd_status FOREIGN KEY (cd_status) REFERENCES GPA_Status(cd_status);

ALTER TABLE  GPA_Resposta ADD CONSTRAINT FK_GPA_Resposta_GPA_Usuario_cd_usuario FOREIGN KEY (cd_usuario) REFERENCES GPA_Usuario(cd_usuario);
ALTER TABLE  GPA_Resposta ADD CONSTRAINT FK_GPA_Resposta_GPA_Solicitacao_cd_solicitacao FOREIGN KEY (cd_solicitacao) REFERENCES GPA_Solicitacao(cd_solicitacao);

Ah sim! Por que eu utilizei o nome GPA antes dos nomes das tabelas? Why?

Bem, existem empresas para qual você trabalha(ou ainda vai trabalhar) que não tem o hábito de criar um banco de dados para cada sistema e por isso, enfiam todas as tabelas de todos os sistemas em um só banco. Mas por que fazem isso?

Fazem isso porque entendem que não devem existir vários bancos de dados “amontoados” e por isso, entendem também que isso traz maior organização. Mas isso é verdade?

Olha, eu nunca curti isso, pois não é assim que você sai pensando da faculdade, entretanto as más línguas dizem que não faz diferença se você tem vários bds ou um com um monte.

Particularmente vejo muita desvantagem nisso quando quero fazer backup de só um banco ou migrar só determinados dados, pois o processo deixa de ser simples para se tornar “gambiarrento”, se assim posso dizer.

Conclusão: só utilizei este GPA antes do nome das tabelas porque estou fazendo aqui no serviço da mesma forma.

Bem, por hoje é só.

Post anterior
02 – Criando um aplicação completa em Asp.Net/MVC 4 e ExtJS 4 – Documento de Requisitos

fonte: http://mastigado.wordpress.com

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: