我遇到以下情况: 有实体'Master_Entity'。该实体具有名称,类型,持续时间等属性。还有其他两种类型的实体“实体”和“子实体”。与'Master_Entity'相同(它们具有完全相同的属性)。
最后,'Master_Entity'应该包含'Entity'的集合,'Entity'应该包含'Sub-Entity'的集合。棘手的部分是“实体”类型的记录可以是不同“Master_Entity”的一部分(“子实体”相同),但它们可以具有不同的持续时间值。如何实现这种模块化?
我想到了这一点,但这并不是很有效。愿你们帮助我。
编辑:想象一下这是一种工作跟踪器。例如,您有一个“创建PHP应用程序”(主实体)。该实体包含完成此工作所需的时间。此外,它包含一个实体“编写代码”(Entity),这个实体可以分为“编写Http客户端”(Sub-Entity),它具有特定于此作业的持续时间属性。
另一方面,您可能还有其他工作:“创建Java应用程序”(主实体),它将包含相同的“编写代码”实体,但持续时间具有不同的值,因为应用程序的上下文正在建设。
我希望有一个单独的记录“编写代码”,但它的持续时间值对于它所分配的每个作业应该是不同的。如何通过创建“实体”类型的最小重复记录来实现这一目标?
答案 0 :(得分:0)
这听起来像这三张桌子对你有用:
Entity
* Id
* Name
* Type
EntityGroup
* Id
* Name
* ParentEntityGroupId
* ParentEntityId
EntityRelationship
* Id
* EntityId
* ParentEntityId
* EntityGroupId
使用此结构,您可以让实体成为组的成员,或者是另一个实体的独立子项。您还可以让一个组成为实体的子项,甚至是另一个组的子项。在不知道您的数据细节的情况下,很难知道您可能需要什么,但这应该可以让您开始。
答案 1 :(得分:0)
根据您的说法,您似乎根本不需要EAV,因为您不会为每个项目提供不同的属性,只是不同的值。因此你不应该使用它。
您需要的是查找表和表格的组合,以解决工作的实际跟踪历史记录。 这是因为这是时间敏感数据。创建项目时的任务可能与两年后与该任务组关联的任务大不相同,但您需要记录任务创作时间)。请注意,这不是非规范化,而是及时创建数据图片。真正的持续时间总是发生在项目上,而不是任务。在任务中,您可以将建议的持续时间用作起点。我使用类似的设计(当然有更多的字段)来设计数据库,用于构建技术硬件相关项目的销售提案。这里真正的关键是识别需要存储哪些数据作为点时间,以及用于构建最终项目数据的查找数据是什么。如果有人将新任务添加到"创建Java应用程序"小组,您不想更改已完成或正在工作的项目的详细信息,只需更改新项目。
所以你需要:
<div class="post-head">
<div class="picture">
<img src="https://upload.wikimedia.org/wikipedia/commons/3/31/Japan-bio-stub.png" />
</div>
<div class="post-head-info">
<h1 class="line-height">Title that might wrap Title that might wrap Title that might wrapTitle that might wrap</h1>
<span>Posted on by author</span>
</div>
</div><br>
<div class="post-head">
<div class="picture">
<img src="https://upload.wikimedia.org/wikipedia/commons/3/31/Japan-bio-stub.png" />
</div>
<div class="post-head-info">
<h1 class="minus-margin">Title</h1>
<span>Posted on by author</span>
</div>
</div>
当然,根据需要,这些表中的每一个都可能具有其他字段。