- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 6 meses atrás por igordonin.
-
AutorPosts
-
19 de julho de 2006 às 6:17 pm #76060igordoninParticipante
Gostaria de saber se alguém pode explicitar os prós e contras das sequences sob esse ângulo.
Uma sequence para cada tabela X Uma sequence para toda a aplicação
Obrigado.
19 de julho de 2006 às 8:25 pm #76062Marcio68AlmeidaParticipanteA sequence é um “autonumerador”, é usado (por exemplo) para diferenciar registros que necessitariam de muitas colunas para formar uma PK.
Não faz sentido um autonumerador para uma aplicação, deve ser por tabela…19 de julho de 2006 às 10:27 pm #76063igordoninParticipanteOk. Obrigado.
Na verdade, a minha pergunta surgiu porque trabalhei em um projeto que possuia um sequence única. Não conheço muito de banco de dados, muito menos Oracle, mas tive uma idéia para um negócio e resolvi me aventurar.
Pois bem… Essa aplicação possui uma sequence única com cache padrão. Atualmente já possuem IDs com 7 casas. Acredito que estão usando para os IDs o Data Type Number (sem especificação de posição nem escala). Que implicações isso pode ter futuramente para a aplicação?
Formatei minha base de dados para trabalhar com IDs em Data Type Number(10). É mais recomendável utilizar, ao invés, por exemplo, CHAR(10) ???
Ps.: Migrei do SQL Server 2005 para o Oracle sem saber que não possuia Data Type Bit ou Boolean… e ainda não acredito!
Novamente, grato por qualquer ajuda.
20 de julho de 2006 às 11:03 pm #76064Marcio68AlmeidaParticipanteBom… vamos lá…
Se você cria uma sequence para todas as tabelas, cada tabela receberá um número dessa sequence, a tabela A tem os registros 1, 5, 12 e 18 a tabela B tem 3, 9 14, 29 e 35 e assim por diante… para que serviria a sequence ???
Se você vem do SQL Server, então está acostumado com a coluna identit (acho que é assim que se escreve), e essa coluna só pode existir uma por tabela e não pode ser compartilhada como você sugeriu…
Quando uma coluna é numérica, eu aconselho que seja sempre armazenada como numérica, não como char, evitando assim entrada de valores indesejados (que acontece com mais frequência do que você imagina)…
Uma coluna numérica com 10 dígitos, armazena dez bilhões de registros, você pretende ter esse volume de dados em uma tabela ???
O tipo CHAR aloca o espaço definido para ele (no Oracle, cada banco tem sua particularidade) o tipo VARCHAR2 aloca o espaço utilizado na coluna, por exemplo se você colocar o valor ‘abc’, no tipo CHAR (10) vai estar reservado 10 bytes e no VARCHAR2 (10) apenas 3.
Os tipos de de dados são básicos em todos os bancos, sendo que em alguns bancos há implementação de alternativas, como tipo money e boolean, temos que nos adaptar às restrições de cada banco…21 de julho de 2006 às 6:31 pm #76068igordoninParticipanteSe você cria uma sequence para todas as tabelas, cada tabela receberá um número dessa sequence, a tabela A tem os registros 1, 5, 12 e 18 a tabela B tem 3, 9 14, 29 e 35 e assim por diante… para que serviria a sequence ??? Se você vem do SQL Server, então está acostumado com a coluna identit (acho que é assim que se escreve), e essa coluna só pode existir uma por tabela e não pode ser compartilhada como você sugeriu…
Identity. Sim, estou familiarizado com esse campo. Ademais, eu sei das implicações dos gaps gerados pela sequence do Oracle e seu cache, o que é ainda mais verdadeiro no caso de usar uma única sequence para toda a aplicação.
O que eu queria saber eram os prós e contras disso… Uma vantagem eu enxergo: ficar criando sequence é um saco, e ficar colocando na programação o nome de cada uma sequence diferente para cada tabela é pior ainda. Óbvio que eu poderia simplesmente usar o select max… (fora da sequence, claro) Mas prá quê?!
Uma coluna numérica com 10 dígitos, armazena dez bilhões de registros, você pretende ter esse volume de dados em uma tabela ???
Acredito que não. Mas isso interfere com a performance do sistema?
Eu tenho conhecimento de data types, e não foi minha intenção entrar em uma disputa com o tão querido Oracle, e eu sei que temos que nos adaptar às diferenças de cada banco.
Não tenho dúvidas que o Oracle é ABSOLUTAMENTE o melhor hoje, e trabalho com o 9i. Não sou conhecedor, não sou programador, nem analista de sistemas. Sou formado em administração. O que sei, aprendi metendo as caras e discutindo em fórums como esse. Mas enfim… o que quis dizer é que não há motivos para não ter um Data Type Boolean! (ou eu não vejo motivo, como queira).
Pior ainda… descobri ontem que as pesquisas em Oracle são Case Sensitive! Só posso perguntar, Oh Deus Porquê?!?! Perdi escalabilidade de forma impressionante! Meus índices não-númericos dançaram, e todas as consultas com strings vêm com o maldito NLS_LOWER() ou NLS_UPPER() associados. Já estou até pensando em adiar a transição até que eu possa trabalhar com o 10g, que permite case insensitive queries.
Bem… Utilizei cambos NUMBER(1) com constraints que só permitem 0 ou 1 para resolver o problema do Boolean… No ASP, não precisarei nem sequer adaptar minha aplicação. Se isso ajudar mais alguém…
Mas Márcio, muito obrigado por toda sua ajuda. Sou um iniciante inquieto e meio chato, mas agradeço mesmo a pessoas como você que dispõe de tempo para contribuir com uma comunidade como essa. Espero poder fazer o mesmo.
Abraço
-
AutorPosts
- Você deve fazer login para responder a este tópico.