Relacionar dados em dois bancos de dados diferentes

27 views
Skip to first unread message

Érique Moreira

unread,
Apr 25, 2019, 1:22:52 PM4/25/19
to web2py-users-brazil
Boa Tarde

Tenho 3 bancos de dados diferentes, que relacionam a estratificação de risco em saúde bucal do paciente.

1) Cadastro do paciente

2) Dados da estratificação (ex.: tabagismo, dor, cárie, água com flúor, etc)

3) resultado da estratificação (Baixo Risco, Médio Risco, Alto Risco)

os BD 2 e 3 são referenciados pelo paciente

Estou criando gráficos, porém não consigo relacionar por exemplo o tabagista com a grau de risco. São 36 tabagistas estratificados, gostaria de saber quantos são Baixo Risco, Médio Risco e Alto Risco.

Db da estratificação

db.define_table('estratifica',
                Field ('paciente', 'reference paciente'),
                Field ('data', 'date', default = request.now),
                Field ('condicao', 'string', default ="n.d.n"),
                Field ('cronica', 'integer', default = 0),
                Field ('intelectual', 'integer', default = 0),
                Field ('acamado', 'integer', default = 0),
                Field ('tabaco', 'integer', default = 0),
                Field ('cri', 'integer', default = 0),
                Field ('dor', 'integer', default = 0),
                Field ("mb", 'integer', default = 0),
                Field ('seca', 'integer', default = 0),
                Field ('car3', 'integer', default = 0),
                Field ('car4', 'integer', default = 0),
                Field ('car8', 'integer', default = 0),
                Field ('ferida', 'integer', default = 0),
                Field ('sangue', 'integer', default = 0),
                Field ('mole', 'integer', default = 0),
                Field ('total', 'integer', default = 0),
                Field ('parcial', 'integer', default = 0),
                Field ('perda', 'integer', default = 0),
                Field ('endo', 'integer', default = 0),
                Field ('perio', 'integer', default = 0),
                Field ('cirurgia', 'integer', default = 0),
                Field ('diag', 'integer', default = 0),
                Field ('esp', 'integer', default = 0),
                Field ('escol', 'integer', default = 0),
                Field ('doce', 'integer', default = 0),
                Field ('fluor', 'integer', default = 0),
                Field ('pasta', 'integer', default = 0),
                Field ('escovar', 'integer', default = 0),
                Field ('servico', 'integer', default = 0),
                Field ('mamadeira', 'integer', default = 0),
                Field ('chupeta', 'integer', default = 0),
                Field ('comportamento', 'integer', default = 0),
                Field ('supervisao', 'integer', default = 0),
                Field ('defeito', 'integer', default = 0),
                format = "%(data)s")

db.define_table('estratificacao',
                Field ('paciente', 'reference paciente', label = "Nome do Paciente:"),
                Field ('data', 'date', label = "Exame Data: ", requires = IS_DATE(format = '%d/%m/%Y', error_message="Data Inválida Ex.: 27/07/1984")),
                Field ('condicao', 'string', label = "Condição : ", requires = IS_IN_SET(['n.d.n.', 'gestante', '< 3 anos', "3<x>6 anos", "> 6 anos", "6<x>12 anos", "adolescente", "idoso", "paciente especial",'diabético', 'saúde mental'])),
                Field ('risco', 'string', label = "Risco : ", requires = IS_IN_SET(['Baixo Risco ', 'Médio Risco', 'Alto Risco'])),
                Field ('escore', 'integer', label = "Escore : "),
                format = "%(date)s")
                

db.estratifica.data.requires = IS_DATE(format = '%d/%m/%Y', error_message="Data Inválida Ex.: 27/07/1984")
db.estratifica.condicao.requires = IS_IN_SET(['n.d.n.', 'gestante', '< 3 anos', "3<x>6 anos", "> 6 anos", "6<x>12 anos", "adolescente", "idoso", "paciente especial",'diabético', 'pós-parto'])

Attique Tecnologia

unread,
May 31, 2019, 5:23:55 PM5/31/19
to web2py-users-brazil
Olá, Érique.
Eu me recordo de tentar fazer isso com SQLite a um tempo atras, porém não tive sucesso pois a DAL irá criar um indice para fazer a referência entre tabelas o que no SQLite não é possível, somente para tabelas do mesmo banco. Veja a tabela auth_membership


CREATE TABLE auth_membership (

  id       INTEGER PRIMARY KEY AUTOINCREMENT,

   user_id  INTEGER REFERENCES auth_user (id) ON DELETE CASCADE,

   group_id INTEGER REFERENCES auth_group (id) ON DELETE CASCADE

);




O que talvez não seja impossível em SGDBs como Postgre e MySQL.

Uma solução que encontrei foi definir o campo relacionado como 'integer' e fazer a validação de chave estrangeira manualmente, não recomendado.

Ex:
db1 = db('caminho_do_banco1')
db2
= db('caminho_do_banco2')
db1
.define_table('tipos', Field('nome'))

db2.define_table(
     
'elementos'
     
, Field('tipo_id', 'integer', requires=IS_IN_DB(db1, tipos.id) # algo parecido com isso
     
, Field('descricao')
)


Reply all
Reply to author
Forward
0 new messages