Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 试图理解实体关系图中的基数?_Database_Oracle_Diagram_Erd_Cardinality - Fatal编程技术网

Database 试图理解实体关系图中的基数?

Database 试图理解实体关系图中的基数?,database,oracle,diagram,erd,cardinality,Database,Oracle,Diagram,Erd,Cardinality,我是关系数据库的新手,最近在理解一个实体关系图时遇到了很多麻烦 这是:(ERD代表一家虚构的律师公司) 基本上,我的任务是使用这个ERD并编写一个SQL脚本来创建数据库,很明显,我可以用我可以生成的数据填充表。SQL语法并不是我不喜欢的东西,它只是理解图表中的基数 对我来说,术语“1对1”、“1对多”、“多对多”只是没有点击,我不知道它们的意思以及它们如何影响主键和外键的位置 我可以利用这些表轻松创建相关列,例如,我知道“client”表将包含类似“client_name”的内容。但是,当涉及

我是关系数据库的新手,最近在理解一个实体关系图时遇到了很多麻烦

这是:(ERD代表一家虚构的律师公司)

基本上,我的任务是使用这个ERD并编写一个SQL脚本来创建数据库,很明显,我可以用我可以生成的数据填充表。SQL语法并不是我不喜欢的东西,它只是理解图表中的基数

对我来说,术语“1对1”、“1对多”、“多对多”只是没有点击,我不知道它们的意思以及它们如何影响主键和外键的位置

我可以利用这些表轻松创建相关列,例如,我知道“client”表将包含类似“client_name”的内容。但是,当涉及到(比如)将“client”表与“case”表链接时,我如何知道外键去了哪里

“client”表是否包含“case”表中的“caseID”以及“client”表中包含“clientID”的“case”表?或者只有一个表有外键?像这样的事情我就是不明白


很抱歉发布了这么长的帖子,如果有人能用通俗易懂的英语解释我是如何着手开发这个ERD的,我将不胜感激!我已经困惑了两天了:(

这种图表风格

每个框都有一个实体类型/类/集和表,每个标记行都有一个关系类型/类/集和表

行尾指向参与关系类型的实体类型。您需要知道应用程序域中的实体和关系。表中的一行表示实体/关系实例。每个端点的关系类型表到实体类型表都有一个外键。它们将引用实体类型的候选键

一行末尾的基数告诉您,对于给定的实体实例,它可以出现在多少关系实例/行中。如果给定的实例/值不必出现在实例/行中,则为0。(一个人不必拥有宠物)。如果它只能出现在一个实例/行中,则为1。(一个人必须拥有头部。)如果它出现不止一次,那就太多了。(一个人可以养很多宠物。所以一个人养宠物的数量应该是0或多个。)一般来说,我们把可能性的数量放在一行的两端,并在我们阅读标签的方向上写上“可能性到可能性”或“可能性:可能性”

有“has”或“is”或“is associated with”行,没有标签的显式关系类型/表,而实际关系显示为实体类型(具体化/关联实体类型/类/集)。这些行实际上只是从表到参与者实体表的外键。(一个人可以与另一个人结婚;该人的关系实例也是婚姻的关联实体实例。)大概这就是这种样式显示n元关系的方式。(令人困惑。)(此类标签的实际关系由关联实体类型表的投影表示。)

其他约定

有些方法将可能性限制在特定的选择上。有时“1”表示“0-or-1”。有些方法通过关系行不存在或存在与通过强制但可为空的外键区分关系中的0-or-1参与。有些方法允许与两个以上参与方建立关系。(好主意。)然后,您只需从标签到实体绘制另一条线。它是X:Y:Z:……一些方法使用基数标记实体线的远端。(不处理n元关系,除非您将它们编码为关联实体,因此所有“关系”都是二进制的。)有些方法有用于标签的符号,有些方法有未标记的行,这些行只是外键

报纸上碰巧有一篇好文章

外键

我们不需要外键来了解关系的含义,也不需要更新或查询数据库。关系表中会出现实体表的候选/主键列集,因为这些实体参与该关系。我们通过将关系和条件组合到其他关系中进行查询,而DBMSILD对应的表表达式并计算其值


外键只是表示列列表的subrow值必须是另一个列列表的subrow值,该列列表在其表中是唯一的。因此,如果是这样,可以通过声明外键来表示。(这有助于DBMS拒绝错误的更新和优化,并且可以帮助人们理解关系或注意错误。)这通常是当实体表键列列表出现在关系表中时,因为该实体参与了该关系。(不幸的是,有些方法和工具调用外键关系,而它们不是;它们只是真实的语句。看看在您自己的图表中,如何有/has/associated标签不是关系,而是像它们一样绘制的。)

ERDs是一个非常好的工具,我相信一旦您了解了它们,您就会同意

这些关系始终很重要。在数据库中,客户机和案例之间的关系是1对多关系。这意味着每个案例必须有一个且只有一个客户机,但每个客户机必须至少有一个案例,但可以有多个。在这种情况下,每个客户机都应该有一个客户机id,该id是主键,并且必须是唯一的等等。这将在案例表中作为外键引用,以便案例表为每个案例都有一个客户机id。这将强制两个表之间的1对多关系

正如您所看到的,此图中的大多数关系都是1对多关系,这就是设计良好的数据库应该如何强制引用的