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 / 230840
Accepted
guettli
guettli
Asked: 2019-02-28 00:45:23 +0800 CST2019-02-28 00:45:23 +0800 CST 2019-02-28 00:45:23 +0800 CST

Maneira mais comum de expressar cardinalidade em ascii

  • 772

Sei que existem vários símbolos para expressar a cardinalidade entre as entidades.

Mas existe uma maneira pragmática comum de expressar cardinalidade em ascii?

Exemplo: Usuário -- Grupo. Um usuário pode ter vários grupos e um grupo pode ter vários usuários.

Eu olhei para esta página: https://en.wikipedia.org/wiki/Cardinality_(data_modeling)

Por exemplo: "pedido" de um para muitos ←→ "item de linha"

Aqui estão algumas maneiras gráficas de expressar a cardinalidade:

https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Cardinalities

Qual é a maneira mais comum de expressar cardeais?

Existe um padrão/rfc para isso?

terminology
  • 3 3 respostas
  • 806 Views

3 respostas

  • Voted
  1. Best Answer
    EzLo
    2019-03-05T03:16:40+08:002019-03-05T03:16:40+08:00

    A maneira UML (linguagem de modelagem unificada) é representar a cardinalidade com <lower bound> .. <upper bound>, sendo cada um vinculado a um inteiro não negativo e *representar potencialmente infinito. Você pode encontrar isso no ponto 7.5.4 Notação dentro da documentação vinculada anteriormente.

    No entanto, isso se aplica geralmente a muitos diagramas de modelagem diferentes e não exclusivamente a ERDs. Ao escrever relacionamentos entre tabelas de maneira relacional , a notação mais usada que encontrei foi N:M(ou N to M, N,M). A maneira como você descreve os relacionamentos também é importante, pois na verdade existem 2 partes de cardinalidade/multiplicidade que você precisa especificar. Verifique os seguintes exemplos:

    • Encomendar com itens de linha . Um pedido deve ter pelo menos 1 item de linha e pode ter infinitos. Um item de linha não pode existir sem um pedido e pertence apenas a um pedido. Isso seria implementado em bancos de dados relacionais com tabela Order e LineItem, com LineItem tendo uma chave estrangeira não nula em relação a Order.

      Order to LineItem: 1 to N
      LineItem to Order: 1 to 1
      
    • Funcionário consigo mesmo (relação da cadeia de comando). Um determinado funcionário pode não ter chefe (o principal chefe) ou apenas 1. Um chefe pode não ter funcionários abaixo, ou uma quantidade infinita. Isso seria implementado em bancos de dados relacionais com uma tabela Employee, que possui uma chave estrangeira consigo mesma que pode ser nula.

      Boss to Employee: 0 to N
      Employee to Boss: 0 to 1
      
    • Pessoa consigo mesma (relações pai e mãe). Cada pessoa tem um pai e uma mãe. Cada pai pode não ter filhos, ou ter muitos (digamos, por exemplo, os pais podem ter uma quantidade infinita enquanto as mães podem ter até 10). A maneira de implementar isso em bancos de dados relacionais é por meio de 2 campos na mesma tabela Person, que se vincula a si mesma por meio de chave estrangeira anulável (reforço parcial).

      Person to father: 1 to 1
      Father to person: 0 to N
      
      Person to mother: 1 to 1
      Mother to person: 0 to 10
      

    A maioria dessas relações geralmente é simplificada apenas mencionando o limite superior de cada lado. Então, para o boss to employeeseria 1 to Ne lê-se como "um chefe pode ter até N funcionários, um funcionário pode ter até 1 chefe".

    Existem algumas ressalvas com essas expressões na implementação, dependendo de cada banco de dados que você usa.

    No exemplo de pedido, se um pedido deve ter um item de linha existente ao criar o registro e um item de linha deve ter um pedido existente, como você pode carregá-los sem falhar? Em bancos de dados relacionais, primeiro você carrega o Pedido e depois seus itens de linha, então em um ponto há um pedido que não possui um item de linha, mas essa notação expressa não como ele deve ser implementado, mas como essas entidades estão relacionadas em um nível de negócios.

    No exemplo da paternidade, em algum momento não haverá informações sobre um pai, caso contrário você teria uma quantidade infinita de níveis de paternidade. Portanto, a implementação real do nível superior seria Person to father: 0 to 1.

    Quanto ao exemplo gráfico, acho a notação pé de galinha a mais simples de usar, mas não existe um padrão universal para isso.

    • 4
  2. Rick James
    2019-03-05T12:01:28+08:002019-03-05T12:01:28+08:00

    Eu simplesmente digo:

    order : item is 1:many
    
    student : class is many:many
    

    Há também 1:1, mas geralmente é um design ruim ter duas tabelas em um relacionamento 1:1.

    Pode haver variantes com "0", mas isso pode ser mais confuso do que benéfico.

    • 1
  3. Michael Green
    2019-03-07T04:13:02+08:002019-03-07T04:13:02+08:00

    Eu costumo trabalhar com a notação pé de galinha. Na arte ASCII eu usaria o hífen e maior que / menor que. Por exemplo

    Um cliente faz muitos pedidos
    Customer -< Order

    Um usuário está em muitos grupos; um grupo contém muitos usuários
    User >-< Group

    Os nomes dos relacionamentos podem ser inseridos entre os hífens ou entre colchetes
    Customer --[Places]--< Order

    Se a cardinalidade precisa for importante, ela pode ser anexada às extremidades
    Child (1) --[Loves]--<(3) Teddies

    Caret (^), v minúsculo e pipe (|) podem girar os diagramas se isso servir

     Customer
       |
       ^
     Order
    
    • 1

relate perguntas

  • Validade e precisão dos dados de acordo com a integridade do banco de dados

  • No SQL, são chaves compostas ou compostas?

  • O que é um predicado residual?

  • Uma “Tabela de 'Junção'” é o mesmo que uma Entidade Fraca?

  • Engenheiros de software e DBAs [fechado]

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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