AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 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

在 ascii 中表示基数的最常见方式

  • 772

我知道有几种符号可以表示实体之间的基数。

但是有没有一种务实的通用方式来表达 ascii 中的基数?

示例:用户 -- 组。一个用户可以有多个组,一个组可以有多个用户。

我查看了此页面:https://en.wikipedia.org/wiki/Cardinality_(data_modeling)

例如:一对多“订单”←→“订单项”

以下是一些表达基数的图形方式:

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

表示基数的最常用方法是什么?

这有标准/ rfc吗?

terminology
  • 3 3 个回答
  • 806 Views

3 个回答

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

    UML方法(统一建模语言)是用来描述基数<lower bound> .. <upper bound>,每个都绑定一个非负整数并*描述潜在的无限。您可以在之前链接的文档中的7.5.4 Notation点上找到它。

    然而,这通常适用于许多不同的建模图,而不仅仅适用于 ERD。在以关系方式编写表之间的关系时,我发现使用最广泛的符号是N:M(or N to M, N,M)。描述关系的方式也很重要,因为实际上有 2 个基数/多重性部分需要指定。检查以下示例:

    • 订单与行项目。一个订单必须至少有 1 个行项目,并且可能有无限个。一个订单项不能没有订单而存在,并且只属于 1 个订单。这将在具有 Order 和 LineItem 表的关系数据库上实现,其中 LineItem 具有针对 Order 的非空外键。

      Order to LineItem: 1 to N
      LineItem to Order: 1 to 1
      
    • 员工与自己(指挥链关系)。一个特定的员工可能没有老板(最高主管)或只有 1 个。老板可以没有下面的员工,也可以是无限多个。这将在具有一个表 Employee 的关系数据库上实现,该表自身有一个可以为空的外键。

      Boss to Employee: 0 to N
      Employee to Boss: 0 to 1
      
    • 人与自己(父亲和母亲的关系)。每个人都有一位父亲和一位母亲。每个父母可能没有孩子,或者有很多(假设父亲可以有无限数量,而母亲最多可以有 10 个)。在关系数据库上实现这一点的方法是通过同一个表 Person 上的 2 个字段,它们通过可为空的外键(部分强制)与自身链接。

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

    大多数这些关系通常通过仅提及每一边的上限来简化。所以对于boss to employee它来说1 to N,它被解读为“一个老板最多可以有 N 名员工,一个员工最多可以有 1 个老板”。

    这些表达式在实现时有一些注意事项,具体取决于您使用的每个数据库。

    在订单示例中,如果在创建记录时订单必须有一个现有的行项目,并且一个行项目必须有一个现有的订单,那么您如何才能加载它们而不会失败?在关系数据库上,首先加载订单,然后加载订单项,因此有一次订单没有订单项,但这种表示法并未表达应如何实现,而是表达了这些实体在业务层面。

    在父母身份的例子中,在某些时候不会有关于父母的信息,否则你会有无限多的父母身份级别。所以顶层的实际实现是Person to father: 0 to 1。

    至于图形示例,我发现鱼尾纹符号使用起来最简单,但是没有通用的标准。

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

    我简单的说:

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

    也有 1:1 的,但是让两个表处于 1:1 的关系通常是糟糕的设计。

    可以有带有“0”的变体,但这可能比有益更令人困惑。

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

    我通常使用鱼尾纹表示法。在 ASCII 艺术中,我会使用连字符和大于/小于。例如

    一个客户下了很多订单
    Customer -< Order

    一个用户在多个组中;一个组包含许多用户
    User >-< Group

    关系名称可以插入连字符或方括号内
    Customer --[Places]--< Order

    如果精确的基数很重要,可以将其附加到末尾
    Child (1) --[Loves]--<(3) Teddies

    脱字符 (^)、小写 v 和竖线 (|) 可以旋转图表(如果适用)

     Customer
       |
       ^
     Order
    
    • 1

相关问题

  • 根据数据库完整性的数据有效性和准确性

  • 在 SQL 中,它是复合键还是复合键?

  • 什么是残差谓词?

  • “‘连接’表”是否与弱实体相同?

  • 软件工程师和 DBA [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve