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

Database 从实体关系设计简单的数据库,database,database-design,nosql,Database,Database Design,Nosql,我很少有数据库设计的经验,需要为我正在建设的项目设计一个数据库。这相当简单,但一旦我画出ER图并应用理论(根据我的理解),一个复杂的设计出来了,我认为它是不正确的 问题如下: MC是具有唯一ID的实体集,但可以存在于许多“市场”中,如美国、CA、DE等,因此ID=2和市场=US完全量化MC。MC可以由零个或多个LDAP组和零个或多个POSIX组(但至少有一个)拥有。e、 g.id=2 in market=US可归LDAP 1、LDAP 2和POSIX 3所有。但是id=2 in-market=C

我很少有数据库设计的经验,需要为我正在建设的项目设计一个数据库。这相当简单,但一旦我画出ER图并应用理论(根据我的理解),一个复杂的设计出来了,我认为它是不正确的

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


基于问题a。我不知道ER图是否正确。如果是,我不知道如何从这个图表中得到关系。我提出了MC(ID,name)、LDAP(name)、POSIX(name)、LDAPMC(ID,market,name)、POSIXMC(ID,market,name),但这似乎太复杂了。有人能给我指一下正确的方向吗?

这张图看起来不错,但缺少基数信息。您需要指定在关系的每一端有多少个。根据您的描述,我假设:

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,则如上所述向MC添加FK,但使其成为不可为空的列。将一个可空列作为FK添加到LDAP到MC


等等。

谢谢你的回答。我本应该把问题格式化得更好,让它更具可读性,但我确实提到了问题中的基数。您是对的,MC到LDAP和MC到POSIX都是多对多的。我还提到了我提出的关系。MC、LDAP和POSIX各一个,然后是两个“关联”表LDAPMC和POSIXMC。LDAP、POSIX和MC需要单独的表吗?还是只需要关联表?还有,你说“MCId上的附加索引”是什么意思?我以前听过这个短语,但我不知道它是什么意思。