我正试图找出我应该使用哪种类型的数据模型,以及这个数据模型应该是什么样子。该模型需要存储在关系数据库(SQL)中。使用的语言是:PHP。
我有几种项目:项目、任务和评论。在我的最终申请中,将有许多类型的项目。
每个项目(任何类型)都需要能够属于另一个项目(任何种类),每个项目(任意类型)都必须能够成为另一项目(任意种类)的后续项目。所以我需要两种不同的关系:继承性和时间性;两者都是定向的。无论什么样的关系项目都可能不会回环到自己身上。非法:项目A->项目B->项目C->项目A
我希望能够提取以下类型的信息:
- 显示导致此项目的项目链。(时间关系)输出:列表
- 显示属于此项目的所有项目。(继承关系)输出:树
- 显示此项目如何指向该项目(忽略其他项目中的项目)。(时间和继承关系)输出:
我不知道我会如何想象最后一个。
用户需要能够:
- 添加/删除项目(任何类型)
- 建立/打破(任何类型的)关系
- 更改关系或项目类型
我不明白这怎么会成为关系概念设计的问题。您总是可以通过解析输出(来自查询)来获得所需表单中的信息。例如
模式:
project(pid,...),
milestone(pid,mid),
tasks(tid,mid,..),
reviews(rid,tid,..),
events(evid,rid), ...
从一个项目中,您可以获取导致评审的所有事件,甚至与项目相关的所有事件(通过联接),然后对它们进行解析,以按照您喜欢的任何信息格式进行排列和显示。
用户总是可以添加&删除项目。以你的例子来说,我还不明白"更改关系或项目类型"是什么意思!
Item(iid,itemstuff,typeid,iid)
type(typeid,description)
使用itemstuff,您可以添加可序列化的数据,或者您可能喜欢的常见数据。然后,如果你愿意,专门化:
Item1(iid,i1....)
item2(iid,i2....)
.
但是,改变就意味着更新。
对于类似的问题,我不得不这样做过一次,但当时我并没有为环回而烦恼。我很怀疑你能在rdbms中得到这样一个动态模型。