很高兴您能抽出宝贵的时间来理解,分类和建模要处理的数据,因为从我个人的经验来看,所有这些都使整个开发过程变得更加容易且非常灵活,以适应将来的更改。我很确定您也已经意识到这一点。
初步数据模型和假定的业务规则
阅读您的问题并仔细检查您的图表后,我定义了一个业务规则列表,以描述我对您的规格的理解。定义了此类列表之后,我派生了一个IDEF1X [1]数据模型,我决定将其作为.PDF文档上传到外部平台(Dropbox)中,因为由于其格式,该数据模型不太适合嵌入图像。这两种工具将作为一些重要点的参考,这些点我将在下面标题为“要解决的方面”以继续前进的部分中列举。
首先,这里是…
因为只有这样,所以初步考虑将其视为帮助我们完成所需最终数据模型的一种手段。
假定的业务规则
所述初步数据模型来自业务规则集合(从您的问题推论得出),我将列举如下:
组织和简介
请注意,Profile
当前将其理解为的同义词Person
。
- 安
Organization
是一对多 的朋友Profiles
。
- 安
Organization
是一对多 的朋友Organizations
。
- An
Organization
是一对多 的成员Organizations
。
- A
Profile
是一对多的成员Organizations
。
- A
Profile
是一对多 的朋友Profiles
。
- A
Profile
是一对多 的成员Profiles
。
地点和地址
位置和角色
- 一
Location
打开一个一对多 Roles
。
- A
Role
可以一对多执行 Locations
。
- 甲
Profile
(一旦它已经被设置为Member
一个Organization
)可以执行一个对多 Roles
,在一对许多 Locations
(但只有一个特定Role
于每个Location
在特定的时间点,即,无法在两个或多个 Roles
在同一时间)。
要解决的方面,以便继续前进
为了不断提高您的数据模型的分辨率,以下列出了一些相关点,一旦我们进行了研究,它们将有助于我们实现这一目标:
我假设您所使用的术语Profile
与的含义相似(或相同)Person
,但可能有所不同。这样,您是否可以说在您的方案中,实体Organization
和Person
是的子类型Profile
?
一个Profile
(或Person
)可以一对多拥有 EmailAddresses
,还是一个Profile
(或Person
)固定为正好一个 EmailAddress
?
您是否想提供Organization
通过Telephone
和与进行联系的可能性Email
,或者您想限制仅对Profile
(或Person
)进行联系?
我假设a Location
固定地恰好 Address
是type之一Physical
,这是正确的吗?
是否有可能为一个Location
由共享一个一对多的不同Organizations
或者,否则,Location
由可拥有的只有一个 Organization
?
您已经通过评论说,存在a Member
和a 的事实Friend
是相同的。正如您在我建议的初步数据模型中所看到的那样,我遵循了原始的说明,并描述了不同实体中Organization
和Profile
(或Person
)之间的成员资格和友谊的所有可能组合,因为我认为这可能有助于定义最佳方案。这部分场景的结构。在这个意义上说:
- 我假设该语句的
an Organization is a Member of another Organization
影响与该语句a Profile (or Person) is a Member of an Organization
对称为的实体的影响不同Location
。
- 正如您在数据模型中看到的那样,我认为
Role
of Owner
仅对Organization
and和有效,对我而言,对are 和而言Roles
对Profile
(或Person
)有效。您如何看待这一切?由于您与适用于您情况的业务规则直接联系,因此您需要告诉我我的假设是否正确。Location
Admin
Member
一个Profile
(或Person
)Roles
在同一内部可以发挥不同的作用Location
吗?即,可以Person
同时是Admin
和Member
一样Location
吗?这方面的规则是什么?
我认为同一Profile
(或Person
)可以Roles
在不同方面发挥不同的作用Locations
。例如:一个特定的Profile
(或Person
)同时是Location
“ 1”中的“ Admin” ,而同一Profile
(或Person
)则同时是“ 2” Member
中的Location
“”。我对吗?
一个人可能Location
同时拥有不同LocationTypes
的人,还是一个Location
固定的人恰好持有一个人LocationType
?
该属性是否Organization.Website
代表特定组织的网站地址,例如“ dba.stackexchange.com”?
如果Profile
“1”(理解为Person
)是Member
(或Friend
)的Profile
“2”,是有可能为Profile
“1”,以进行Role
在Location
所拥有Profile
“2”?我认为这样的场景仅对一个Organization
和一个Member
Person
这样的关系有效,您怎么看?
以类似的方式,如果Organization
“1”是一个Member
(或Friend
)的Organization
“2”,是有可能为Organization
“1”,以进行Role
在Location
所拥有Organization
“2”?同样,我认为这种情况仅对an Organization
和a 之间的关系有效,这Member
Person
是正确的吗?
在这方面(当我写这个问题时),我认为可以合理地说,只有三种不同的关系涉及Organizations
和Persons
,我们可以定义:
- (a)an
Organization
和a 之间的关系Person
为“ Membership
”。
- (b)a
Person
与另一个之间的关系Person
为“ Friendhip
”。
- (c)我们还没有找到一个有意义的名字来描述一个人
Organization
与另一个不同人之间的关系Organization
。
- 所以,让我知道您对(a),(b)和(c)的看法。
一个Organization
同时可能是一对多的Friend
(或Member
)不同?或者,一个人只能与一个完全不同的人建立关系Organizations
Organization
Organization?
描述先行进展的连续数据模型
为了关注您对我上面列出的未决方面的回应和解决方案,我创建了以下内容:
尽管我对此还不太满意,但是这个新的数据模型表达了以下业务规则:
- 阿
Profile
是要么一个Organization
或一个Person
。[2]
- 阿
Profile
可的供朋友一个一对多 FriendProfiles
,和一个Profile
可以是所述接受朋友一个一对多 FriendProfiles
。[3]
- A
Location
可以由一对多组成 Locations
。[4]
对您随后的特定评论的答案
对我来说,注意/复合关注点的分离非常有趣(例如LocationAddress和ProfileAddress)-因为我显然想匆匆忙忙地持有所有这些对象而没有正确的关系[有趣的是,我的原始ERD感觉不合适。
是的,这是一个很好的比较,尽管我不会称其为关注点分离(这当然是应用程序编程和设计的基本原理),因为该术语通常与应用程序开发阶段有关,我们目前发现自己处于理解数据并设计其逻辑结构的阶段。
根据我的亲身经历,我认为此阶段与将重要事物放入其整个上下文有关,这与查看与特定兴趣场景相关的不同实体之间存在的关联有关,然后在数据模型中描述这些东西。在您要评论的特定情况下,该Address
实体可能与其他实体具有不同类型的连接,一个与Profile
,另一个与与Location
。
而且,是的,当某些事情不正确或不自然时,这很可能表明人们需要付出更多的努力才能理解相关数据。以这种方式,Address
实体是我认为需要更多注意的事情之一,因为我认为a Profile
和an 之间的关系Address
可以通过Location
实体来处理(因为每个人都Location
必须至少拥有一个实体Address
),因此我们可以取消ProfileAddress
最新模型中描述的关联实体,但是您应该继续分析这些观点,并让我知道您的想法。
另外,在IDEF1X中是否经常更改实体中的PK / FK符号以提高可读性[例如ProfileId-LocationOwnerProfileId]?
是的,这是您的非常聪明的话,因为IDEF1X建议使用角色名称来表示FOREIGN KEYS,以便根据使用它的实体来捕获此类属性的含义。还值得注意的是,这也与主键迁移的概念密切相关。事实上,角色名称的使用先于IDEF1X,因为它最初是由EF Codd博士在1970年的开创性著作中提出的。以这种方式,可以清楚地看到IDEF1X标准对关系模型的忠诚度。
对于解决方案中/中的问题,我会很感兴趣,以了解您不喜欢/不喜欢的东西吗?
除了上述关于已经描述的细节Address
实体,我不知道,如果Roles
由给定进行Profile
特定Location
等价于一个Organization
或一个Person
。从我的角度来看,Person
首先需要将与关联Organization
,然后Organization
将其指定Person
为Role
在特定Location
的条件下执行,但是您更了解这种情况,因此此规则可能是不必要的。在这方面,我要坚持的事实,那将是非常有益的,我知道上下文说明或意义,这种数据结构给未来的用户Organization
,Profile
以及Location
,但我知道这可能被视为机密信息,因此这是一个限制。
在当前结构下,似乎每个人(Organization
或Person
)都可以与任何人(再次Organization
或Person
)相关联,并且可以/在任何Role
地方(Location
)进行任何操作(),但实际上,这正是您和用户对数据库的期望当然,您会为此提供明确定义的约束。如果是这种情况,那么我们几乎可以提供最终解决方案。由于您自然会在这种情况下起决定性作用,因此您还应该分析一下这些想法,然后让我知道您的结论,以便我们采取最终步骤。
可行的第二次推进
不幸的是,交流是在几周前停止的,我想是因为您必须履行工作承诺,这是完全合理的。如果我们开发了一个更稳定,更可靠的模型,我会更加满意,但是由于我们之前的互动,我可以假设我已经为您指明了正确的方向。
除了在此问答过程中已经介绍过的内容之外,我认为提供先前数据模型的新进展可能对其他有类似问题的求职者也有所帮助。因此,我创建了...
组织和配置文件初步数据模型-二次进阶
从这种数据模型中可以看出,我删除了前面模型中和之间的多对多关系,因为给定已经通过其所拥有的与多对多相关。Profile
Address
Profile
Addresses
Locations
此新进展中说明的另一个变化是,它现在包括给定Location
可以由一对多 拥有的可能性Profiles
。因此,我已经改变了Location
PRIMARY KEY(由驳回LocationOwnerProfileId
属性),然后加入缔实体(多到许多其涉及)Profile
用Location
。
笔记
1. IDEF1X是高度推荐的数据建模技术,1993年12月被美国国家标准技术研究院(NIST)定义为标准。
2.这是(super)type-subtype集群的出现。如果您有兴趣,这里有一个答案,我将在这种答案中更详细地介绍这种关系。
3.一个多对多层次关系的示例,它与为“零件开发问题”提供最终解决方案的结构非常相似。当然,这种解决方案是由Edgar Frank Codd博士在1970年极具影响力的论文“大型共享数据库的数据关系模型”中提出的。
4.因此,这是一对多(或多对一)层次关系的实例。