3

我试图找出我应该使用哪种数据模型以及这个数据模型应该是什么样子。模型需要存储在关系数据库 (SQL) 中。使用的语言:PHP。

我有几种项目:项目、任务和评论。在我的最终应用程序中,将有许多类型的项目。

每个项目(任何类型)需要能够属于另一个项目(任何类型),每个项目(任何类型)需要能够是另一个项目(任何类型)的后续。所以我需要两种不同的关系:继承和时间顺序;两者都是定向的。无论是哪种关系项目都可能不会回环到它们自己。非法:项目 A -> 项目 B -> 项目 C -> 项目 A。

我希望能够提取以下类型的信息:

  • 向我展示导致该项目的项目链。(时间关系) 输出:列表
  • 显示属于此项目的所有项目。(继承关系)输出:树
  • 告诉我这个项目如何导致那个项目(忽略其他项目中的项目)。(时间顺序和继承关系)输出:??

我不知道我会如何想象最后一个。

用户需要能够:

  • 添加/删除项目(任何类型)
  • 建立/破坏关系(任何类型)
  • 更改关系或项目类型。
4

2 回答 2

0
Item(iid,itemstuff,typeid,iid)
type(typeid,description)

使用 itemstuff,您可以添加可序列化的数据,或者您可能喜欢的常见内容。然后,如果您愿意,可以专攻:

Item1(iid,i1....)
item2(iid,i2....)
.

但是,改变就意味着更新。

对于类似的问题,我不得不这样做一次,但当时我并没有为环回而烦恼。我严重怀疑您能否在 rdbms 中获得这样的动态模型。

于 2012-11-18T16:24:54.740 回答
0

我不明白这如何通过关系概念设计成为问题。您始终可以通过解析输出(来自查询)来获取您正在寻找的表单中的信息。例如

使用架构:

project(pid,...),
milestone(pid,mid),
tasks(tid,mid,..),
reviews(rid,tid,..),
events(evid,rid), ... 

从一个项目中,您可以获取导致审核的所有事件,甚至与项目相关的所有事件(通过连接),然后通过它们进行解析,以您喜欢的任何信息格式排列和显示。

用户始终可以添加和删除项目。以您的示例为例,我还无法理解“更改关系或项目类型”的含义!

于 2012-11-18T14:54:50.440 回答