AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 27353
Accepted
codecool
codecool
Asked: 2012-10-23 02:30:45 +0800 CST2012-10-23 02:30:45 +0800 CST 2012-10-23 02:30:45 +0800 CST

Projeto de banco de dados com diferentes funções de usuário conectadas por diferentes relacionamentos a uma tabela de organização

  • 772

Um usuário está conectado a uma organização por alguma função. Digamos que haja 2 funções freelancer e funcionário.

Um funcionário só pode fazer parte de uma organização e, se for funcionário, não pode ser freelancer. Considerando que um freelancer pode estar conectado a várias organizações e também não pode ser um funcionário.

Resumindo, Freelancer e Funcionário são usuários. O Freelancer está conectado à Organização por meio de um relacionamento de muitos para muitos. O funcionário está conectado à organização por meio de um relacionamento de um para muitos.

O que eu pensei:

user{
   id,
   name,
   other_fields,
}

organization{
    id,
    other_fields
}

freelancer{
    user_id,
    organization_id,
    Primary_Key(user_id, organization_id)
}

employee{
    user_id,
    organization_id,
    Primary_key(user_id),
}

Há um problema aqui, no entanto. A restrição de ser freelancer ou funcionário, mas não ambos, deve ser implementada no nível do aplicativo.

  1. Quais são os prós e contras do esquema acima?
  2. Quais são as outras alternativas possíveis para o esquema de design?
  3. E se houver mais categorias de usuários? O esquema atual requer a adição de uma nova tabela se uma nova função de usuário for criada. Está tudo bem ou ruim?
  4. A manutenção do banco de dados também é uma preocupação de fazer um esquema que não deve tornar a manutenção um problema
database-design performance
  • 1 1 respostas
  • 1637 Views

1 respostas

  • Voted
  1. Best Answer
    FrustratedWithFormsDesigner
    2012-10-23T09:20:55+08:002012-10-23T09:20:55+08:00

    Quais são os prós e contras do esquema acima?

    A principal desvantagem que vejo é que freelancere employeetêm os mesmos campos, mas são tabelas diferentes. A diferença é o que primary_keyé composto, mas eu me pergunto se você poderia normalizar isso como

    emplpoyee
    {
        user_id,
        employee_type, (could be "FREELANCER" or "FULLTIMEEMPLOYEE")
        organization_id,
        Primary_key
    }
    

    Para primary_key, você pode precisar de alguma lógica de aplicativo para criar uma string baseada em user_ide employee_type, e opcionalmente incluir o valor de organization_idse o funcionário for um freelancer.

    Você pode até ir um passo além e ter uma tabela employee_type:

    employee_type
    {
        id,
        description
    }
    

    e, em seguida, faça referência a esse ID em employee.employee_type. Isso resolveria seu problema de adicionar novas tabelas toda vez que houver um novo tipo de usuário.

    Além disso, você já pensou em se fundir employeecom user? Isso simplificaria ainda mais seu esquema, mas você perderia a capacidade de ter um user_idassociado a vários funcionários, o que acho importante para este caso.

    • 2

relate perguntas

  • Como você ajusta o MySQL para uma carga de trabalho pesada do InnoDB?

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve