【问题标题】:Database implementation of a class-diagram类图的数据库实现
【发布时间】:2021-12-30 21:30:39
【问题描述】:

我有以下型号:

我在 Oracle 数据库中创建了每个表,但我不知道如何实现表之间的关系。你能帮忙吗?

【问题讨论】:

  • 有不同的关系。你担心哪一个?
  • 您能否确认您已为图表中出现的每个类创建了不同的表?
  • 是的,我为图表中出现的每个类创建了一个不同的表

标签: database oracle11g orm uml class-diagram


【解决方案1】:

有很多可能性,但这里有一些精选的建议:

  • 一对多关联(或聚合或组合)通常通过将“one”的主键显示为“many”中的外键来实现。这种技术有时称为Foreign key mapping
    示例:Address 表的主键将是Fire 表的附加外键列。
  • 多对多关联通常使用关联表实现,关联表具有两个外键,对应于关联类的主键。这有时称为 association table mapping
    示例:您将有一个额外的关联表 PostFire 有两个外键列,一个对应于 Post 的主键,另一个对应于主键到Fire的主键。
  • 关联类是通过关联表实现的(见上文)。
    示例:对于实现Scale 的表,您将添加两个外键列,一个具有主键 Client,另一个具有Fire 的主键。
  • 继承有很多方法。如果您已经创建了 4 个表,那么诀窍是让“父”的主键显示为“子”的外键,并对该值具有唯一约束。另一个更简单的变体可能是重用父级的主键作为子级的主键。这两种技术都被称为class table inheritance,因为每个类都对应一个表。
    示例:向Fireman 添加一个外键列,对应于User 的主键。李>

P.S:几点,与您的问题没有直接关系:

  • 关联类名称Scale 和关联名称confirm 之间存在UML 不一致。关联类同时是关联,类和洞只有一个名字。

  • 永远不要在数据库表中存储密码。 Storing a hash code of the password 是一种更安全的方法。

【讨论】:

  • 用户的属性呢,我创建了admin的表,不包括主题吗?
  • @DJAMEL 在单表继承中,不要复制继承类的表中的属性。这意味着您需要连接多个表才能获得完整的对象。另一种选择是concrete table inheritance:没有抽象类的表,但父类的属性在其所有子类中复制。获取完整对象更容易,但代价是冗余表结构和更复杂的方法来确保通用行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多