从实体关系设计简单的数据库

时间:2014-11-14 08:00:01

标签: database database-design nosql

我对数据库设计的经验很少,需要为我正在构建的项目设计一个。这很简单,但是一旦我绘制出ER图并应用理论(根据我的理解),就会出现一个复杂的设计,我认为它不正确。 ER that I came up with

问题如下: MC是具有唯一ID的实体集,但是可以存在于诸如US,CA,DE等的许多“市场”中,因此id = 2并且market = US完全量化MC。 MC可以由零个或多个LDAP组以及零个或多个POSIX组(但至少其中一个)拥有。例如市场中的id = 2 =美国可能由LDAP 1,LDAP 2和POSIX 3拥有。但市场中的id = 2 = CA可能仅由POSIX 4拥有.MC和组之间存在多对多的关系。许多LDAP / POSIX组可以拥有许多MC,反之亦然。

基于问题a。我不知道ER图是否正确b。如果是,我不知道如何从这个图中获得关系。我想出了MC(ID,名称),LDAP(名称),POSIX(名称),LDAPMC(ID,市场,名称),POSIXMC(ID,市场,名称),但这似乎太复杂了。有人可以指导我朝正确的方向发展吗?

1 个答案:

答案 0 :(得分:1)

该图表看起来不错,但缺少基数信息。您需要指定关系每端的数量。根据您的描述,我认为它是:

MC - LDAP

  • 1 MC可以指向多个,1或0个LDAP(0 .. *,其中* ==很多)
  • 1 LDAP可以指向多个,1到0个MC(也是0 .. *)。

MC到POSIX是一样的。 (其他基数为1 .. * - 可能很多但必须为1; 0..1 - 0或最多1;而1 - 必须为1。)

在这种情况下,您最终会遇到许多关系:MC可以有很多LDAP,LDAP可以有很多MC。传统上这些是通过“关联”表来完成的:

create table LDAPtoMC
(
    LDAPId, MCId -- these make up the PK, with an additional index on MCId
)

...其中MCId是MC的PK,LDAPId是LDAP的PK。

如果您有1个MC必须有0或1个LDAP,LDAP可能有0个或多个MC,您可以将LDAPId作为可空字段添加到MC并从中创建外键到LDAP表。您不需要LDAP表上的任何内容。

如果关系为1,则MC必须具有1个LDAP,1个LDAP具有0..1 MC,然后如上所述将FK添加到MC,但使其成为不可为空的列。将可空列添加到LDAP作为FK到MC。

等等。