Skip to content

Chingling152/SQL-SPMedGroup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SP Medical Group (Banco de dados)

Banco de dados usado na API SP Medical Group

Sumario

1. Banco de dados

2. Modelagem

Banco de dados

Sobre

SP-MedicalGroup é uma empresa fantasma(er.... eu acho) e esse banco de dados foi criado usando todo meu conhecimento em modelagem de banco de dados e foi programado em SQL.

Arquitetura

O Banco possui as tabelas : Tipo_Usuario , Usuario,Paciente , Especialidade , Clinica e Medico
Para ver melhor como as tabelas se relacionam veja o Modelo descritivo.

Usuario

Tabela onde serão armazenados os usuarios , terão email , senha e um Nivel de privilegio do usuario (1 = Usuario , 2 = Medico , 100 = Administrador), o email deverá ser unico .
Essa tabela é referenciada nas tabelas Paciente e Medico (Observação : para criar um administrador, crie diretamente na tabela Usuario e deixe o tipo dele como administrador)

Paciente

Tabela onde ficarão todos os pacientes (depende de um valor de referencia em Usuario)
Essa tabela é referenciada na tabela Consulta.

Especialidade

Tabela onde ficarão todas as especialidades medicas

Clinica

Tabela onde ficarão todas as clinicas , é referencia apenas pela tabela Medico.

Medico

Tabela onde ficará todos os Medicos
Deverá ter um CMR unico , e um valor para se referenciar na tabela Usuario

Consulta

Ordem dos arquivos

Os arquivos iniciais tem um padrão a ser executado e o padrão é

  1. Criação das Tabelas : Criação.sql
  2. Criação das Views : Views.sql
  3. Criação dos Procedures (seleção) : Procedures_de_seleção.sql
  4. Criação dos Procedures (inserção): Procedures_de_inserção.sql
  5. Valores padrão (opcional) : Valores_iniciais.sql
    Tambem pode se usar o arquivo Modelo_de_dados.xlsx para inserir o valores iniciais (manualmente ou importando para o SQL Management Studio)

Tabelas

O Arquivo Criação.sql contem todas as tabelas necessarias para criar todas as tabelas, a ordem está de cima para baixo então, apenas execute todas as linhas de uma vez (pra poupar trabalho).Alem disso, o arquivo Criação.sql deve ser o primeiro a ser executado porque nele há o comando principal pra criação do banco de dados (CREATE DATABASE).

Alterando tabelas

Você pode alterar qualquer valor da tabela antes de criar. Porém deve ter bastante cuidado ao fazer isso , pois irá prejudicar (ou inutilizar) muitas views , funções e inserts que usam alguns campos.
Você apenas podera usar views que usam todas as colunas sem especificação (*Veja Views ) , alterar as views existentes ou criar suas proprias views (Por favor se fizer isso , use o arquivo Views.sql)

Removendo tabelas

Caso queira remover qualquer tabela existente , apenas apague ela do arquivo Criação.sql .Brincadeira , não faça isso você irá inutilizar o programa. Você terá que reescrever TODO o codigo denovo , mesmo que remova uma tabela pequena.
NÃO É NEM UM POUCO RECOMENDADO APAGAR TABELAS.

Criando novas tabelas

Criar novas tabelas também é possivel (tudo é possivel.. é um arquivo.sql , yupi!) tambem não muito recomendado, mas apesar de tudo, criar tabelas novas seria o que causaria o menor impacto.
Mesmo assim, não é recomendado (a manutenção do codigo ficaria dificil).
A unica exceção é caso você crie uma tabela baseada em TipoUsuario, (Exemplo : Administrador,Paciente e Medico)

Dados

O Banco de dados tem valores padrões gerados em Valores_iniciais.sql são apenas alguns valores iniciais.

Inserção de dados

Caso queira inserir dados, use o arquivo Inserções_do_usuario.sql.
Ou use o arquivo Modelo_de_dados.xlsx importe ele usando o SQLServer caso queira alguns dados iniciais para teste (futuramente irei adicionar mais registros para testes de performace com bigdata)
Os dados do banco de dados podem ser tanto manipulados com Procedures (Recomendado) ou com INSERT(Não recomendado).
Antes de inserir os dados, veja que algumas tabelas dependem de valores em outras tabelas.
A inserção de dados é util caso você queria testar alguns valores iniciais (mas não é seguro, pois não tem validação) Então, pra facilitar o seu trabalho aqui tem uma tabela de prioridades (Ordem crescente):

  1. Especialidade \ Clinica
  2. Usuario
  3. Paciente \ Medico
  4. Clinica
  5. Consulta

Exemplo :

Para criar um paciente, Você teria ue ter um usuario para referenciar, mas cada usuario tem um tipo de usuario. Então para criar um paciente seria necessario antes, ter um usuario e um tipo de usuario.

Inserir dados diretamente usando INSERT pode deixar o codigo confuso, veja Procedures de inserção

Alteração de dados

Pode-se alterar da maneira normal ou usando os Procedures de Alteração

Remoção de dados

Não é recomendado remover dados do banco(mas caso queira, use o DELETE)

Visualização de dados

Para visualizar os dados de alguma tabela , você pode usar usar Views Criadas por você mesmo , ou ja feitas. Use isso para testar o banco de dados (qualquer problema, coloque como issue) .
A seleção não afeta a integridade do banco de dados.

Views

Views são usadas nesse banco da dados para retornarem um grupo de dados para a aplicação sem precisar que ela tenha que ter a logica ja pronta nela (isso dificultaria muito a manutenção do codigo), somente tabelas com outras tabelas referenciadas tem views.

Views existentes

Aqui ficarão todas as views e tudo que cada uma delas retorna.
Views sempre retornam valores da tabela, mas filtram o que será enviado.


  • VerMedicos

    • Todas informações do Medico
    • Usuario registrado do Medico
    • Especialidades
    • Todas informações da Clinica
  • VerPacientes

    • Todas informações do Paciente
    • Usuario registrado do Paciente
  • VerConsultas

    • ID da consulta
    • Todas informações do Paciente
    • Todas informações do Medico
    • Todas informações da Clinica
  • VerUsuarios

    • Todas as informações de todos os usuarios (que não tenham privilegios de administrador)

Views do usuario

Você pode criar suas proprias views no arquivo Views_do_usuario.sql (Ou não.... você pode fazer tudo em um arquivo se quiser), não há muito o que dizer, já existem views o suficiente no banco de dados (a não ser que você queira filtrar mais).

Procedures

Procedures são pequenas funções que executam um certo grupo de comandos, nesse banco de dados há varios procedures.
Essas funções, assim como as views, foram criadas para serem usadas pela aplicação (ja que o programador da aplicação não tem a necessidade de saber o que é um INSERT ou UPDATE)
Assim a logica de banco de dados fica somente no banco de dados e não na aplicação

Procedures de alteração

Procedures de alteração são apenas usados para alterar alguns valores que precisariam de 2 comandos. São bastante uteis para que não precisem ficar usando o UPDATE.
**Todos os procedures de alteração devem ter o parametro ID, pois é necessario saber qual registro será alterado **

  • AtualizarPaciente
    Altera todos os valores do Paciente e do Usuario que ele referencia (algoritmo secreto hihi) Parametros :

    • ID : Numero inteiro (deverá ser o ID do paciente que você quer editar)
    • Email : Texto (até 200 caracteres)
    • Senha : Texto (até 200 caracteres)
    • Nome : Texto (até 200 caracteres)
    • CPF : Texto de exatos 11 caracteres
    • RG : Texto de exatos 9 caracteres
    • Telefone : Texto de exatos 11 caracteres
    • Data de nascimento : Uma data valida (ano/mes/dia)
  • AtualizarMedico
    Altera todos os valores do Medico e do Usuario que ele referencia Parametros :

    • ID : Numero inteiro (deverá ser o ID do medico que você quer editar)
    • Email : Texto (até 200 caracteres)
    • Senha : Texto (até 200 caracteres)
    • Nome : Texto (até 200 caracteres)
    • CRM : Texto (Recomendado numeros) de 7 caracteres
    • ID da clinica onde ele trabalha : Numero inteiro (o valor deve corresponder ao id de alguma registro na tabela Clinica)
    • ID da especialidade do medico : Numero inteiro (o valor deve corresponder a algum registro na tabela Especialidade)
  • AtualizarClinica
    Atualiza todas as informações de uma clinica selecionado pelo ID Parametros :

    • ID : Numero inteiro (deverá ser o ID da clinica que você quer editar)
    • Nome Fantasia : Texto (até 200 caracteres)
    • Endereço : Texto (até 250 caracteres)
    • Numero : Numero
    • CEP : Texto (Exatos 8 caracteres)
    • Razão social : Texto (até 200 caracteres)
  • Não há procedura para alterar Usuario (os procedures AtualizarMedico e AtualizarPaciente ja fazem isso. Administradores não poderão ser alterados diretamente (somente usando UPDATE))

  • AtualizarConsulta Atualiza os valores de uma consulta (não altera o paciente. Não faz sentido mudar o paciente de uma consulta) Parametros :

    • Descrição : Texto (Sem limite de caracteres)
    • Data da Consulta : Uma data valida
    • Status da Consulta: Numero inteiro (Valores deverão ser definidos em uma enumeração na aplicação)
    • ID do Medico : Numero inteiro (o valor deve corresponder a algum registro na tabela Medico)

Procedures de inserção

Procedures de inserção facilitam o trabalho e garantem que os dados serão inseridos corretamente, Exemplo : o Procedure para criação de paciente cria um usuario e cria o paciente ja anexado ao usuario. Isso previne que varias pessoas herdem do mesmo usuario

  • InserirPaciente
    Cria um usuario para o paciente e depois cria o paciente (ja referenciando o usuario criado)
    Parametros :

    • Email : Texto (até 200 caracteres)
    • Senha : Texto (até 200 caracteres)
    • Nome : Texto (até 200 caracteres)
    • CPF : Texto (Recomendado numeros) de 11 caracteres
    • RG : Texto (Recomendado numeros) de 9 caracteres
    • Telefone : Texto (Recomendado numeros) de 11 caracteres
    • Data de nascimento : Uma data valida (ano/mes/dia)
  • InserirMedico
    Cria um usuario (com privilegios de medico) e depois cria um Medico (ja referenciando o usuario criado)
    Parametros :

    • Email : Texto (até 200 caracteres)
    • Senha : Texto (até 200 caracteres)
    • Nome : Texto (até 200 caracteres)
    • CRM : Texto (Recomendado numeros) de 7 caracteres
    • ID da clinica onde ele trabalha : Numero inteiro (o valor deve corresponder ao id de alguma registro na tabela Clinica)
    • ID da especialidade do medico : Numero inteiro (o valor deve corresponder a algum registro na tabela Especialidade)
  • InserirClinica
    Cria uma clinica com todas as informações necessarias Parametros :

    • Nome Fantasia : Texto (até 200 caracteres)
    • Endereço : Texto (até 250 caracteres)
    • Numero : Numero
    • CEP : Texto (Exatos 8 caracteres)
    • Razão social : Texto (até 200 caracteres)
  • InserirAdmin Apenas cria um usuario com privilegios de administrador
    Parametros :

    • Email : Texto (até 200 caracteres)
    • Senha : Texto (até 200 caracteres)
  • InserirConsulta Cria uma consulta no banco de dados Parametros :

    • Descrição : Texto (Sem limite de caracteres)
    • Data da Consulta : Uma data valida
    • Status da Consulta: Numero inteiro (Valores deverão ser definidos em uma enumeração na aplicação)
    • ID do Paciente : Numero inteiro (o valor deve corresponder a algum registro na tabela Paciente)
    • ID do Medico : Numero inteiro (o valor deve corresponder a algum registro na tabela Medico)

Procedures do usuario

Você pode criar procedures no arquivo Procedures_do_usuario.sql

Modelagem

Aqui ficarão os modelos que usei para criar o banco de dados (não faz muito sentido criar modelo para um banco de dados simples mas é uma boa pratica (pra não sair codando e errando))

Modelo conceitual

O Modelo descritivo tem as ligações de ida e volta (use como exemplo ruas, o lado direito é a ida e o esquerdo é a volta ; Exemplo da Clinica : Ela possui N medicos (ida) e os Medicos podem apenas pertencer a uma Clinica)
Modelo Conceitual

Modelo logico

Aqui está o exemplo do modelo logico do projeto (E o mais fiel ao resultado final)
Contem todas as tabelas e todas as colunas , as ligações são mostradas atraves das linahs de conexão (não tem ida e volta então fica um pouco dificil entender) porem tem o PK (Primary key : Chave primaria) e o FK(Foreign key : Chave estrangeira) assim da para saber qual tabela referencia qual.
Removi a tabela de administradores , pois eles não carregavam nada de especial então não havia necessidade de um banco de dados só para um usuario com o valor diferente ModeloLogico

Modelo fisico

O modelo fisico é como o banco de dados ficou (Removi a tabela de Tipo usuarios pois descobri que poderia usar uma enumeração). Modelo fisico

Releases

No releases published

Packages

No packages published