我对 ERD 图中的继承表示有疑问。下面的例子:我有飞机,我也有两种类型的飞机 1-PersonsPlane 2-CargoPlane 我对使用哪种关系感到困惑(1-to-1 OR 1-to-Many)。我的 DB 老师告诉我应该使用 1 对 1 关系,但是我在互联网上发现许多示例使用(1 对多)关系而不是(1 对 1)关系。检查这些图像:
哪一个是正确的??
当我跑步时,rake db:migrate我得到这个错误
rake aborted!
Saving diagram failed!
Verify that Graphviz is installed and in your path, or use filetype=dot.
Run Code Online (Sandbox Code Playgroud)
完整日志:
rake db:migrate
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 20 models...
rake aborted!
Saving diagram failed!
Verify that Graphviz is installed and in your path, or use filetype=dot.
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/diagram/graphviz.rb:207:in `rescue in block in <class:Graphviz>'
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/diagram/graphviz.rb:198:in `block in <class:Graphviz>'
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/diagram.rb:142:in `instance_eval'
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/diagram.rb:142:in `save'
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/diagram.rb:120:in `create'
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/diagram.rb:74:in `create'
/home/bcc/.rvm/gems/ruby-2.2.3/gems/rails-erd-1.4.5/lib/rails_erd/tasks.rake:41:in `block (2 levels) …Run Code Online (Sandbox Code Playgroud) 我有我的图形数据库,填充了节点,关系,属性等.我希望看到整个数据库如何连接,每个节点的每个关系,节点的属性等的概述.
我并不是指查看每个单独的节点,而是来自关系数据库的ERD,类似这样的节点标签.这可能吗?
一位兼职漫画家的奶农也有几头奶牛.他将每头牛分配给一个特定的牛群.在每个牛群中,农民都有一头他最喜欢的牛 - 通常是牛在动画片中的特色.每个牛群中的一些不满,主要是那些认为应该出现在卡通片中的人,不同意农民对最喜欢的牛的选择,他们贬低地称之为神圣的牛.结果,每个牛群现在都选出了一个牧群领袖.
这就是我认为表格应该是什么样的,如果可以做得更好,你可以告诉我吗?到目前为止,我正在使用喜欢的表做多对多,因为中间是这是最好的解决方案,也不需要SQL语句这只是出于设计目的.
先感谢您
Table Herd Table Favorite Table Cartoon Table Cow
PK herdID Intermediate Table PK cartoonID PK cowID
herdname cartoonTitle cowName
herdleader cartoonType
cartoonDate
Run Code Online (Sandbox Code Playgroud)
编辑图片@ 3:01 pmEST这是对的吗?
cowErd http://img838.imageshack.us/img838/1268/capture3h.png
添加了新的图像@ 8:57 am 7/20/2010可以有人评论这个ERD请 Erd2 http://img37.imageshack.us/img37/5794/capture3fc.png
添加新图片@ 12:47 pm 7/20/2010除非有任何异议,这是每个Mark的解释标记ERD的最终草案 http://img651.imageshack.us/img651/691/capture4b.png
我们什么时候需要在数据库设计中使用一对一的关系?在我看来,如果两个表是一对一的关系,它们可以组合成一个表.这是真的?
我正在开发旅行管理应用程序.有问题的设计如下:
旅游中的每个人都被指定为旅行者.每位旅行者都有护照.现在,旅行者可以是主会员或子会员,具体取决于他是否是家庭主管.MainMember决定像TourPackage这样的东西,他的旅行家庭的总金额等.一个SubMember在旅行时依赖于MainMember.因此,如果删除了MainMember,则还必须删除其所有子成员.
所以,旅行者有护照.(一对一关系)旅行者是主会员或子会员.(Traveler-MainMember和Traveler-SubMember之间的一对一/一)MainMember可能有几个SubMembers.(一对多)子成员只有一个主要成员.(多到一个)
我目前的ERD如下.

如您所见,三个表 - Traveler,MainMember和SubMember - 形成了循环依赖.不过,我不确定它是否会伤害我的应用程序.如果我删除作为MainMember的Traveler,则1.删除Traveler中的记录.2.删除其相关的MainMember记录.3.删除依赖于MainMember的SubMember记录.4.删除子成员的旅行者记录.
虽然它似乎不是问题,但由于Traveler-MainMember删除将始终只删除Traveler-SubMember(s).不过,我对此感觉不好.
任何人都可以指导我更好的设计吗?
更新 -
在等待回复的同时,我根据@ Daveo的回复提出了另一种设计.基本上,Traveler包含自引用外键.SubMember记录将使用它来识别他们的父母.
这是ERD.

现在,正如@Branko指出的那样,我之前的设计中没有循环依赖问题,我想知道哪种设计更好?
另外,通过Hibernate实现哪种设计会更好?我认为第二种方法可能会在通过Hibernate实现时导致复杂性.
我还要感谢关于您喜欢的设计的实现模式(Hibernate实体中的继承等)的一些指示.
database-design erd circular-dependency hibernate-mapping class-table-inheritance
在 ERD 中,弱/非识别关系是连接两个强实体的关系,用虚线表示。强/识别关系是一种将强实体连接到弱实体的关系(弱实体是一种包含来自其相关实体的外键 [FK] 作为其自己的主键 [PK] 的组成部分),并被指示用实线。
我的问题是,那又怎样?为什么区分弱/非识别关系与强/识别关系如此重要,以至于 ERD 设计者应该分别用虚线和实线进行区分?为什么这么重要?
对我来说,ERD 中的每个元素和约定都应该添加必要的信息,这些信息要么直接转换为数据库设计(即 DDL SQL 语句),要么至少解释重要但不一定明显的信息(以及最后一种情况的示例)将命名关系 - 它们不会转换为 SQL,但它们对于理解 ERD 非常有用)。为了讨论起见,这是一个示例 ERD(从另一个 StackOverflow 问题修改而来):

我已经考虑了很多,对我来说,实线与虚线添加的唯一信息已经在以下约定中得到充分传达:
据我所知,实线与虚线的关系线没有增加额外的有用信息。这种约定不是添加信息,而是不直观且非常混乱。作为它们造成的混淆的一个例子,StackOverflow 上有许多重复的问题,询问哪个是哪个;这里只是几个例子:
任何人都可以向我解释约定添加的哪些附加信息不包含在 FK 可能是也可能不是 PK 的一部分这一事实中?我正在认真考虑完全忽略约定(也就是说,我想开始用所有实线绘制我的 ERD),但如果有人能指出我忽略的重要内容,我将不胜感激。
我有一个 SQL Select 查询,表之间有很多连接,我想知道哪种图表可以以图形方式表示它,以便可视化表及其类型之间的连接(区分 INNER 和 LEFT)?
我做了这个简单的模式来表示我的查询,但我正在寻找一种已知的更好类型的图表:
传奇:
如何模拟类似钻石(如果术语正确)的关系?最好用一个简化的例子来解释:
有organization,item和tag实体。
我的目标是建模:
tag都是独一无二的,属于一个组织。item都是独一无二的,属于一个组织。tag/item对必须属于同一组织。(即来自组织 A 的项目不能与来自组织 B 的标签配对)我绘制了两种替代解决方案,但没有一个让我满意。
图1个断裂第三目标:items和tags使用是自己唯一id的主键,但没有什么可以阻止插入到对item_tag属于不同的组织。
图2不破,但弯曲第一和第二目标:organization_id加入作为主键和外键item和tag表和item_tag.organization_id列引用两者。这可以防止来自不同组织的配对。tag.idanditem.id列现在是不必要的复合主键的一部分,因为实际上单列id表示itemand 的唯一性tag。
我如何正确地为这些需求建模?
erd ×10
database ×3
sql ×2
diagram ×1
foreign-keys ×1
graphviz ×1
mysql ×1
neo4j ×1
phpmyadmin ×1
postgresql ×1
ruby ×1
visualize ×1