Pág 4 de 5 PrimeiroPrimeiro 12345 ÚltimoÚltimo
Resultados 61 a 80 de 91

Tópico: Quando o cliente nos baralha a cabeça - Ajuda em 3 situações

  1. #61
    Power Member
    Data do Registo
    24-04-2007
    Local
    Vila do Conde
    Heias.
    Eu dei uma vista de olhos ao topico todo.
    Como já foi dito aqui, eu gerava esse campo especial que tu queres através de um trigger sempre que se inserisse imóveis. E nunca o utilizaria como chave (mas convém ser indexado).
    O problema da race condition é solucionável usando transactions. Podes usar stored procedures, não faças é isso fora da db porque não tens maneira de impedir race conditions e um agente ficar com duas casa com o nº 40 por exemplo.


    So há uma coisa que não percebi bem. Que é o que acontece quando se apaga uma casa ou agente. Se apagares uma casa não faz sentido que, se o contador de casas desse agente estava no 41 quando fores inserir uma nova casa ele fique na mesma no 41 porque utilizaste o espaço deixado vazio pela casa que foi apagada. Penso que fará mais sentido pensar no nº de casa como um contador de todas as casa que o agente já teve e não de todas as casa que o agente actualmente tem.

    Just my 2 cents.

  2. #62
    Sem teres que alterar a estrutura das tuas tabelas, poderás criar uma view com:
    Código:
    CREATE VIEW codigos_imoveis AS
    SELECT @id_imovel_agente := IF(@agencia = id_agencia AND @agente = id_agente, @id_imovel_agente + 1, 1) AS id_imovel_agente,
            CONCAT(CONCAT(CONCAT(CONCAT(id_agencia, '-'), id_agente), '-'), @id_imovel_agente) AS codigo,
            @agencia := id_agencia AS id_agencia,
            @agente := id_agente AS id_agente,
            id_imovel
    FROM agencias_agentes_imoveis
    Sendo que agencias_agentes_imoveis poderá ser uma outra view ou explicitas os inner joins que tinhas feito nesta propria view.

    Para que os id_imovel_agente se mantenham coesos, não deverás apagar os imoveis. Em vez disso, cria uma tabela onde consideras os imoveis "removidos"
    Código:
    CREATE TABLE imoveis_inactivos (
        id_imovel INTEGER NOT NULL,
        PRIMARY KEY(id_imovel)
    );
    Para ver todos os imoveis "activos", basta usar qq coisa do género:
    Código:
    SELECT *
    FROM imoveis
    WHERE id_imovel NOT IN (SELECT id_imovel FROM imoveis_inactivos)
    Usando a view:
    Código:
    SELECT *
    FROM agencias_agentes_imoveis
    WHERE id_imovel NOT IN (SELECT id_imovel FROM imoveis_inactivos)
    Não tenho a informação da tua estrutura das tabelas e relações entre si, isto é só uma forma de mostrar uma possivel forma de dar a volta ao problema =)
    Rig: Windows 8 Pro x64 | I7 920 @ 3.9Ghz | Asus P6T6 WS Revolution | 3x2Gb GSkill Trident PC16000 | Gainward GTX275 896MB | Corsair HX 620W
    HomeServer: Oracle Solaris 11.1 | Phenom 9950BE BE | Asus M3A79-T Deluxe | 4x2Gb Crucial | OCZ PowerStream 600W | ZFS RAIDZ @ 3x1T Samsung SpinPoint F1 + 1x3T Western Digital RED

  3. #63
    Obrigado pela dica.

    Nunca apliquei views. Como procedo para a sua aplicação?

    Obrigado pela ajuda.
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  4. #64
    Power Member Avatar de franklopez
    Data do Registo
    02-05-2008
    Local
    Vialonga
    Citação Resposta Original de xBoShY Ver Resposta
    Sem teres que alterar a estrutura das tuas tabelas, poderás criar uma view com:
    Código:
    CREATE VIEW codigos_imoveis AS
    SELECT @id_imovel_agente := IF(@agencia = id_agencia AND @agente = id_agente, @id_imovel_agente + 1, 1) AS id_imovel_agente,
            CONCAT(CONCAT(CONCAT(CONCAT(id_agencia, '-'), id_agente), '-'), @id_imovel_agente) AS codigo,
            @agencia := id_agencia AS id_agencia,
            @agente := id_agente AS id_agente,
            id_imovel
    FROM agencias_agentes_imoveis
    Sendo que agencias_agentes_imoveis poderá ser uma outra view ou explicitas os inner joins que tinhas feito nesta propria view.

    Para que os id_imovel_agente se mantenham coesos, não deverás apagar os imoveis. Em vez disso, cria uma tabela onde consideras os imoveis "removidos"
    Código:
    CREATE TABLE imoveis_inactivos (
        id_imovel INTEGER NOT NULL,
        PRIMARY KEY(id_imovel)
    );
    Para ver todos os imoveis "activos", basta usar qq coisa do género:
    Código:
    SELECT *
    FROM imoveis
    WHERE id_imovel NOT IN (SELECT id_imovel FROM imoveis_inactivos)
    Usando a view:
    Código:
    SELECT *
    FROM agencias_agentes_imoveis
    WHERE id_imovel NOT IN (SELECT id_imovel FROM imoveis_inactivos)
    Não tenho a informação da tua estrutura das tabelas e relações entre si, isto é só uma forma de mostrar uma possivel forma de dar a volta ao problema =)
    para quê criar uma tabela à parte para imoveis inactivos se podes colocar um campo na tabela chamado activo e metes a S ou a N?

    Depois é só restringir o select.

    Select * from imoveis where activo = 'S';

    Crias um campo na tabela chamado ordem que não faz parte da chave e cada vez que apagas(mudas o activo para 'N') um imovel reordenas esse campo com todos os imoveis activos do agente.

    Ou na view mostras o Nº da linha e ordenas os registos por data de criação ( tens de ter neste campo a data e hora) crescente.
    Última edição de franklopez; 03-05-2012 às 17:15
    Gaming System » CM 690 II Advanced + Asus Rampage IV Formula + i7 3820 @ 4625Mhz + 16Gb Ripjaw Z @ 2000Mhz + Evga GTX 680 SC + 3x Samsung LS23A700D + Samsung 840 Evo 250Gb + OCZ Vertex 3 120Gb + 2x 2TB WD Green (RAID1)- High Flow Watercooled
    Home Cinema » Samsung LCD LE40A756 + Pionner VSX 919-AH-K + Kef 2005.3 + Logitech Harmony 555
    Media Center » P5E3 Deluxe + E6750 + 4Gb DDR3 CellShock + ATI HD 5670 512Mb + OCZ Vertex 2 120Gb + 4x 2TB Samsung F3
    Vendo / Feedback

  5. #65
    Citação Resposta Original de AndreLC Ver Resposta
    Nunca apliquei views. Como procedo para a sua aplicação?
    Para os SELECTs, tratas como se fosse uma tabela. Para modificações, terás que obedecer a um conjunto de critérios (non-UNIONs, non-JOINS, etc)
    Para criares:
    Código:
    CREATE VIEW codigos_imoveis AS
    SELECT @id_imovel_agente := IF(@agencia = id_agencia AND @agente = id_agente, @id_imovel_agente + 1, 1) AS id_imovel_agente,
            CONCAT(CONCAT(CONCAT(CONCAT(id_agencia, '-'), id_agente), '-'), @id_imovel_agente) AS codigo,
            @agencia := id_agencia AS id_agencia,
            @agente := id_agente AS id_agente,
            id_imovel
    FROM agencias_agentes_imoveis
    Citação Resposta Original de franklopez Ver Resposta
    para quê criar uma tabela à parte para imoveis inactivos se podes colocar um campo na tabela chamado activo e metes a S ou a N?

    Depois é só restringir o select.

    Select * from imoveis where activo = 'S';

    Crias um campo na tabela chamado ordem que não faz parte da chave e cada vez que apagas(mudas o activo para 'N') um imovel reordenas esse campo com todos os imoveis activos do agente.

    Ou na view mostras o Nº da linha e ordenas os registos por data de criação ( tens de ter neste campo a data e hora) crescente.
    Ambas as soluções são validas, e uma será preferivel à outra dependendo da situação (a nivel de performance).

    Em ultimo caso, prefiro criar uma tabela extra ao acrescentar uma simples flag. Se um dia precisares de adicionar mais informação relacionada com os inactivos, deixas de ter a tua tabela na forma normal Boyce–Codd.
    (exemplo: quando é que o imovel ficou inactivo, quem o "desactivou", etc)
    Rig: Windows 8 Pro x64 | I7 920 @ 3.9Ghz | Asus P6T6 WS Revolution | 3x2Gb GSkill Trident PC16000 | Gainward GTX275 896MB | Corsair HX 620W
    HomeServer: Oracle Solaris 11.1 | Phenom 9950BE BE | Asus M3A79-T Deluxe | 4x2Gb Crucial | OCZ PowerStream 600W | ZFS RAIDZ @ 3x1T Samsung SpinPoint F1 + 1x3T Western Digital RED

  6. #66
    Citação Resposta Original de anjo2 Ver Resposta
    ... desculpa te dizer mas estás com dúvidas de principiantes...
    yep, concordo
    Coolermaster HAF XB - Seasonic 660W Platinum - MB AsRock Pro4-M - Intel I7-3770K - Noctua Nh-U12S- 8Gb Corsair vengeance Pro 1600 (2x4gb) - Sapphire HD 7950 3Gb DDR5 Vapor-X - Samsung EVO 250Gb - WD 500Gb Blue - Monitor LG IPS237L (1080p)

  7. #67
    Power Member Avatar de franklopez
    Data do Registo
    02-05-2008
    Local
    Vialonga
    No meu trabalho para cada projecto em que se apaga um registo tivesse uma duplicação de tabelas tinhamos a BD atolhada de lixo.

    Podes sempre colocar 2 campos na tabela principal com cod_utilizador_alt ( código do utilizador que efectuou a alteração) e data_alteração geridos por triggers on change que actulizam estes 2 campos.

    e se necessário crias uma tabela de histórico tb gerida por triggers on change da tabela principal onde guardas os valores antigos e os valores novos do registo alterado.

    deixa-me fazer-te uma pergunta, já alguma vez programás-te para um cliente? ou tiraste um curso de programação dakeles bué basicos que andam prá í e andas a brincar aos programadores?

    desculpa ser tão sêco mas é o que parece, não me leves a mal.
    Última edição de franklopez; 06-05-2012 às 21:41
    Gaming System » CM 690 II Advanced + Asus Rampage IV Formula + i7 3820 @ 4625Mhz + 16Gb Ripjaw Z @ 2000Mhz + Evga GTX 680 SC + 3x Samsung LS23A700D + Samsung 840 Evo 250Gb + OCZ Vertex 3 120Gb + 2x 2TB WD Green (RAID1)- High Flow Watercooled
    Home Cinema » Samsung LCD LE40A756 + Pionner VSX 919-AH-K + Kef 2005.3 + Logitech Harmony 555
    Media Center » P5E3 Deluxe + E6750 + 4Gb DDR3 CellShock + ATI HD 5670 512Mb + OCZ Vertex 2 120Gb + 4x 2TB Samsung F3
    Vendo / Feedback

  8. #68
    A questão é que nunca usei transactions, nem triger, nem SP e tenho alguma dificuldade nestes aspectos. Poderão indicar material de estudo sobre os aspectos que falaste.

    O que são as transactions?

    Não, a ideia é mesmo manter, se apagar não fica no 41 já irá ser 42. Então por exemplo aqui com a função MAX não poderia resolver?

    Obrigado pelos 2 cents, pois ajudaram a esclarecer algumas confusões que estava a fazer. Obrigado

    Citação Resposta Original de ctrler Ver Resposta
    Heias.
    Eu dei uma vista de olhos ao topico todo.
    Como já foi dito aqui, eu gerava esse campo especial que tu queres através de um trigger sempre que se inserisse imóveis. E nunca o utilizaria como chave (mas convém ser indexado).
    O problema da race condition é solucionável usando transactions. Podes usar stored procedures, não faças é isso fora da db porque não tens maneira de impedir race conditions e um agente ficar com duas casa com o nº 40 por exemplo.


    So há uma coisa que não percebi bem. Que é o que acontece quando se apaga uma casa ou agente. Se apagares uma casa não faz sentido que, se o contador de casas desse agente estava no 41 quando fores inserir uma nova casa ele fique na mesma no 41 porque utilizaste o espaço deixado vazio pela casa que foi apagada. Penso que fará mais sentido pensar no nº de casa como um contador de todas as casa que o agente já teve e não de todas as casa que o agente actualmente tem.

    Just my 2 cents.
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  9. #69
    Mas eu tenho um campo na tabela chamado estado! Os estados possíveis são: Activo, Desactivo, Vendido, Reservado.

    E também tenho o campo data_insercao!

    Com esse Select vou seleccionar os imóveis activos, eu tenho isso! Não é essa a minha dúvida... Acho que não percebeste bem a minh dúvida ou fui eu que não percebi.

    Quero é um novo campo onde "reinicie" o id de imóvel do agente, isto é: Não lhe mostrar o ID do imóvel, mas sim um número calculado na altura da inserção que corresponde ao que o se quer (e o que se quer é um número de ordem do imóvel por agência e agente). Secalhar antes de inserir, verificar qual é o número máximo existente daquela combinação de agente e agência, somando um, e guardo junto com o registo...
    Talvez por aqui...


    Citação Resposta Original de franklopez Ver Resposta
    para quê criar uma tabela à parte para imoveis inactivos se podes colocar um campo na tabela chamado activo e metes a S ou a N?

    Depois é só restringir o select.

    Select * from imoveis where activo = 'S';

    Crias um campo na tabela chamado ordem que não faz parte da chave e cada vez que apagas(mudas o activo para 'N') um imovel reordenas esse campo com todos os imoveis activos do agente.

    Ou na view mostras o Nº da linha e ordenas os registos por data de criação ( tens de ter neste campo a data e hora) crescente.
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  10. #70
    A ideia da tabela extra também me parece viável que teria relação muitos para muitos correcto?

    Só que não me recordava como obter o id do último registo auto increment de uma inserção numa dada tabela mas agora lembrei-me que posso sempre utilizar o função mysql_insert_id()...

    Citação Resposta Original de xBoShY Ver Resposta
    Para os SELECTs, tratas como se fosse uma tabela. Para modificações, terás que obedecer a um conjunto de critérios (non-UNIONs, non-JOINS, etc)
    Para criares:
    Código:
    CREATE VIEW codigos_imoveis AS
    SELECT @id_imovel_agente := IF(@agencia = id_agencia AND @agente = id_agente, @id_imovel_agente + 1, 1) AS id_imovel_agente,
            CONCAT(CONCAT(CONCAT(CONCAT(id_agencia, '-'), id_agente), '-'), @id_imovel_agente) AS codigo,
            @agencia := id_agencia AS id_agencia,
            @agente := id_agente AS id_agente,
            id_imovel
    FROM agencias_agentes_imoveis

    Ambas as soluções são validas, e uma será preferivel à outra dependendo da situação (a nivel de performance).

    Em ultimo caso, prefiro criar uma tabela extra ao acrescentar uma simples flag. Se um dia precisares de adicionar mais informação relacionada com os inactivos, deixas de ter a tua tabela na forma normal Boyce–Codd.
    (exemplo: quando é que o imovel ficou inactivo, quem o "desactivou", etc)
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  11. #71
    São opiniões e eu aceito as críticas com muito gosto, mas lembrem-se que todos um dia fomos principiantes!

    Citação Resposta Original de rosepwr Ver Resposta
    yep, concordo
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  12. #72
    Exactamente.

    Novamente, eu tenho esses 2 campos, o id do user que faz o registo/alteração e a data_insercao que actualiza caso for actualizada a informação. Apenas não está a ser gerida por triggers.

    Sim já programei não para um cliente, mas sim para vários. Apenas não tive nenhum projecto com a extensão com que este se aplica. Mas isso é bom é sinal que se pode evoluir cada vez mais. Muito mais que isso, tenho curso sim e não é básico, a questão é que é tudo teoria e pouca prática. Eu conheço os conceitos mas nunca os apliquei na prática, naturalmente que vão surgindo dúvidas.
    Não levo ninguém a mal, são as críticas e desde que sejam construtivas que são óptimas para evoluirmos, é sempre bom contarmos com outras opiniões e gosto de discutir ideias. O "problema" é que estou a fazer confusão com isto das referências e como disse é muita teoria e pouca prática e faço sistemas de CRUD, tudo o que vai além disso é um desafio. Por isso as dúvidas com views, SP, triggers. Também sei que existem o cursores, por exemplo, mas nunca apliquei na prática.

    Gostava de optar por uma solução viável e para isso precisava da vossa ajuda/críticas/ideias/sugestões/concelhos. É tudo bem-vindo.

    Obrigado pela vossa ajuda e colaboração.


    Citação Resposta Original de franklopez Ver Resposta
    No meu trabalho para cada projecto em que se apaga um registo tivesse uma duplicação de tabelas tinhamos a BD atolhada de lixo.

    Podes sempre colocar 2 campos na tabela principal com cod_utilizador_alt ( código do utilizador que efectuou a alteração) e data_alteração geridos por triggers on change que actulizam estes 2 campos.

    e se necessário crias uma tabela de histórico tb gerida por triggers on change da tabela principal onde guardas os valores antigos e os valores novos do registo alterado.

    deixa-me fazer-te uma pergunta, já alguma vez programás-te para um cliente? ou tiraste um curso de programação dakeles bué basicos que andam prá í e andas a brincar aos programadores?

    desculpa ser tão sêco mas é o que parece, não me leves a mal.
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  13. #73
    Power Member Avatar de franklopez
    Data do Registo
    02-05-2008
    Local
    Vialonga
    Acho que o teu cliente tb não percebe grande coisa de Dados, BD e afins. um ID uma chave não se muda.

    cabe-te a ti arranjar uma solução que lhe resolva o problema e não te traga problemas, se é que me entendes.

    Era como mudares a matricula de cada carro que vendesses um ID é um identificador único uma chave que pode ser composta por um ou mais campos, se algum desses campos não for unico não deve fazer parte da chave, não podes a cada vez que apagas, ou vendes um imovel mudar os ids de todos os imóveis que tens.

    Esse teu cliente anda muito baralhado, imagina que alguem que fazer uma reclamação acerca dum imovel que foi vendido, que passou a chamar-se de outra maneira como é que tu o identificas?

    ou que o imovel F passou a ser C porque venderam 2 imoveis, percebes????
    Gaming System » CM 690 II Advanced + Asus Rampage IV Formula + i7 3820 @ 4625Mhz + 16Gb Ripjaw Z @ 2000Mhz + Evga GTX 680 SC + 3x Samsung LS23A700D + Samsung 840 Evo 250Gb + OCZ Vertex 3 120Gb + 2x 2TB WD Green (RAID1)- High Flow Watercooled
    Home Cinema » Samsung LCD LE40A756 + Pionner VSX 919-AH-K + Kef 2005.3 + Logitech Harmony 555
    Media Center » P5E3 Deluxe + E6750 + 4Gb DDR3 CellShock + ATI HD 5670 512Mb + OCZ Vertex 2 120Gb + 4x 2TB Samsung F3
    Vendo / Feedback

  14. #74
    Power Member Avatar de naoliveira
    Data do Registo
    21-06-2007
    Local
    Alcântara
    Citação Resposta Original de franklopez Ver Resposta
    Esse teu cliente anda muito baralhado, imagina que alguem que fazer uma reclamação acerca dum imovel que foi vendido, que passou a chamar-se de outra maneira como é que tu o identificas?
    A solução que encontrei para um problema parecido (sempre que houver uma alteração num registo deve preservar o actual e criar um novo, para se ter histórico das alterações que o registo original vai sofrendo ao longo do tempo) foi criar um campo na tabela que recebe sempre o id do registo original (mesmo quando o original é ainda único). Sempre que é preciso ver as alterações do circuito faço uma busca pelo id original no respectivo campo.

  15. #75
    Power Member Avatar de franklopez
    Data do Registo
    02-05-2008
    Local
    Vialonga
    Citação Resposta Original de naoliveira Ver Resposta
    A solução que encontrei para um problema parecido (sempre que houver uma alteração num registo deve preservar o actual e criar um novo, para se ter histórico das alterações que o registo original vai sofrendo ao longo do tempo) foi criar um campo na tabela que recebe sempre o id do registo original (mesmo quando o original é ainda único). Sempre que é preciso ver as alterações do circuito faço uma busca pelo id original no respectivo campo.
    O problema aqui é que podem mudar isso vezes sem conta, de cada vez que desaparece um imovel todos os outros de alteram é de loucos, isso não faz sentido nenhum, o tipo da imobiliária é um inventor dos grandes.
    Gaming System » CM 690 II Advanced + Asus Rampage IV Formula + i7 3820 @ 4625Mhz + 16Gb Ripjaw Z @ 2000Mhz + Evga GTX 680 SC + 3x Samsung LS23A700D + Samsung 840 Evo 250Gb + OCZ Vertex 3 120Gb + 2x 2TB WD Green (RAID1)- High Flow Watercooled
    Home Cinema » Samsung LCD LE40A756 + Pionner VSX 919-AH-K + Kef 2005.3 + Logitech Harmony 555
    Media Center » P5E3 Deluxe + E6750 + 4Gb DDR3 CellShock + ATI HD 5670 512Mb + OCZ Vertex 2 120Gb + 4x 2TB Samsung F3
    Vendo / Feedback

  16. #76
    Percebo perfeitamente.

    Pois não percebe não. Exactamente eu sei que me cabe a mim, apenas quis trocar ideias com vocês, tipo Brainstorming para perceber como daria facilmente a volta à situação, contando com a vossa ajuda e experiência.

    Mas o imóvel F não vai passar a ser o C, apenas tenho que reiniciar os ids, pensei em fazer isso noutro campo tal como disseram. Ou seja como faço outro campo sem ser o id, mas do género que fosse também autoincrement... Mas como faço sem usar chaves compostas, por exemplo?

    Citação Resposta Original de franklopez Ver Resposta
    Acho que o teu cliente tb não percebe grande coisa de Dados, BD e afins. um ID uma chave não se muda.

    cabe-te a ti arranjar uma solução que lhe resolva o problema e não te traga problemas, se é que me entendes.

    Era como mudares a matricula de cada carro que vendesses um ID é um identificador único uma chave que pode ser composta por um ou mais campos, se algum desses campos não for unico não deve fazer parte da chave, não podes a cada vez que apagas, ou vendes um imovel mudar os ids de todos os imóveis que tens.

    Esse teu cliente anda muito baralhado, imagina que alguem que fazer uma reclamação acerca dum imovel que foi vendido, que passou a chamar-se de outra maneira como é que tu o identificas?

    ou que o imovel F passou a ser C porque venderam 2 imoveis, percebes????
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  17. #77
    Sim o id original irei sempre manter. A questão agora é optar pela melhor via, utilizando ou outra tabela ou outro campo... com esta história eu também acabei baralhado e já fiz e refiz tanta coisa que cheguei a um ponto que estou a dar em maluco com isto.

    Citação Resposta Original de naoliveira Ver Resposta
    A solução que encontrei para um problema parecido (sempre que houver uma alteração num registo deve preservar o actual e criar um novo, para se ter histórico das alterações que o registo original vai sofrendo ao longo do tempo) foi criar um campo na tabela que recebe sempre o id do registo original (mesmo quando o original é ainda único). Sempre que é preciso ver as alterações do circuito faço uma busca pelo id original no respectivo campo.
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  18. #78
    Podes crer!

    Mais uma vez e peço desculpa por gerar tanta confusão, mas que me aconselham a proceder neste caso?

    O meu muito obrigado pela vossa atenção e ajuda.

    Citação Resposta Original de franklopez Ver Resposta
    O problema aqui é que podem mudar isso vezes sem conta, de cada vez que desaparece um imovel todos os outros de alteram é de loucos, isso não faz sentido nenhum, o tipo da imobiliária é um inventor dos grandes.
    echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

  19. #79
    Citação Resposta Original de franklopez Ver Resposta
    Crias um campo na tabela chamado ordem que não faz parte da chave e cada vez que apagas(mudas o activo para 'N') um imovel reordenas esse campo com todos os imoveis activos do agente.
    A ideia é permanecer com o mesmo código desde a sua criação. Este código é, em parte, derivado de chaves primárias (tal como exemplifiquei, no meu caso seria uma chave composta num tabela intermediaria para relações N:N)
    A outra parte é dependente do agente, e é calculada para o agente (daí o uso da view para gerar esta parte do código).

    Citação Resposta Original de franklopez Ver Resposta
    Ou na view mostras o Nº da linha e ordenas os registos por data de criação ( tens de ter neste campo a data e hora) crescente.
    Já devias saber que views não podem ser ordenadas. No caso que exemplifiquei, será naturalmente ordenada pelas chaves compostas.

    Citação Resposta Original de franklopez Ver Resposta
    Acho que o teu cliente tb não percebe grande coisa de Dados, BD e afins. um ID uma chave não se muda.

    cabe-te a ti arranjar uma solução que lhe resolva o problema e não te traga problemas, se é que me entendes.
    O cliente certamente que saberá vender imoveis, e Dados, BD e afins não lhe tiram o sono nem a vontade de ter as coisas como ele deseja.
    Quanto à solução, o user veio pedir opiniões... está explicito no titulo tópico, e não é preciso que lhe relembrem...


    Concluindo, ainda não vi razão para o user experimentar o codigo sql que postei e expor duvidas relacionadas com esse código.
    Ou então, ainda não vi outra solução prática e exemplificada em todo o resto desta thread...

    Ajudem-se a vocês proprios e não percam tempo com bitaites.
    Rig: Windows 8 Pro x64 | I7 920 @ 3.9Ghz | Asus P6T6 WS Revolution | 3x2Gb GSkill Trident PC16000 | Gainward GTX275 896MB | Corsair HX 620W
    HomeServer: Oracle Solaris 11.1 | Phenom 9950BE BE | Asus M3A79-T Deluxe | 4x2Gb Crucial | OCZ PowerStream 600W | ZFS RAIDZ @ 3x1T Samsung SpinPoint F1 + 1x3T Western Digital RED

  20. #80
    Power Member Avatar de naoliveira
    Data do Registo
    21-06-2007
    Local
    Alcântara
    Citação Resposta Original de franklopez Ver Resposta
    O problema aqui é que podem mudar isso vezes sem conta, de cada vez que desaparece um imovel todos os outros de alteram é de loucos, isso não faz sentido nenhum, o tipo da imobiliária é um inventor dos grandes.
    Citação Resposta Original de AndreLC Ver Resposta
    Sim o id original irei sempre manter. A questão agora é optar pela melhor via, utilizando ou outra tabela ou outro campo... com esta história eu também acabei baralhado e já fiz e refiz tanta coisa que cheguei a um ponto que estou a dar em maluco com isto.
    Vou dar um exemplo do que escrevi:

    suponhamos que o inserimos um novo registo com o id=75, este id é também guardado no campo id_original=75, mais tarde se este imóvel passar para outro vendedor, em vez de alterar o registo, cria uma copia deste, que pode, p.ex, ter o id=123, no entanto o id_original mantém-se o 75, faz as alterações que tem de fazer neste novo id (123). Se mais tarde este imóvel voltar a sofrer alguma alteração, será sobre o id 123, cria uma cópia do registo 123, no entanto o id_original continuará a ser sempre 75. Deste modo consegue sempre saber as alterações de um determinado imóvel.

    Citação Resposta Original de franklopez Ver Resposta
    Esse teu cliente anda muito baralhado, imagina que alguem que fazer uma reclamação acerca dum imovel que foi vendido, que passou a chamar-se de outra maneira como é que tu o identificas?
    Voltando a este problema, se um cliente fizer uma reclamação, se for utilizado o método que exemplifiquei (nunca alterar um registo, mas criar uma cópia), consegue sempre chegar ao registo da reclamação.

Pág 4 de 5 PrimeiroPrimeiro 12345 ÚltimoÚltimo

Tópicos Similares

  1. Situações cómicas nos jogos
    By ruleta in forum Jogos - Geral
    Respostas: 43
    Última Mensagem: 14-09-2009, 17:01
  2. 2 discos WD 2.5 externos iguais... baralha o pc...
    By Raines in forum Dúvidas e Suporte Técnico - Hardware
    Respostas: 6
    Última Mensagem: 27-04-2009, 21:53
  3. HD nos 5 canais para quando?
    By llclg3 in forum Home Cinema
    Respostas: 12
    Última Mensagem: 05-02-2009, 23:27
  4. Mail desaparece do webmail quando usado um cliente
    By sl4ck in forum Dúvidas e Suporte Técnico - Internet, Redes e Segurança
    Respostas: 6
    Última Mensagem: 22-01-2006, 16:35

Etiquetas para este tópico

Registe-se no fórum e active o seu registo para deixar de ver este anúncio.