Top Menu

Jump to content
Home
    Modules
      • Projects
      • Activity
      • Work packages
      • Gantt charts
      • Calendars
      • Team planners
      • Boards
      • News
    • Getting started
    • Introduction video
      Welcome to OpenProject Community
      Get a quick overview of project management and team collaboration with OpenProject. You can restart this video from the help menu.

    • Help and support
    • Upgrade to Enterprise edition
    • User guides
    • Videos
    • Shortcuts
    • Community forum
    • Enterprise support

    • Additional resources
    • Data privacy and security policy
    • Digital accessibility (DE)
    • OpenProject website
    • Security alerts / Newsletter
    • OpenProject blog
    • Release notes
    • Report a bug
    • Development roadmap
    • Add and edit translations
    • API documentation
  • Sign in
      Forgot your password?

      or sign in with your existing account

      OpenProject ID Google

Side Menu

  • Overview
  • Activity
    Activity
  • Roadmap
  • Work packages
    Work packages
  • Gantt charts
    Gantt charts
  • Team planners
    Team planners
  • Boards
    Boards
  • Wiki
    Wiki
  • Forums

Content

Updated by Andreas Pfohl 10 months ago

# Data architecture for hierarchical attributes ### Requirements

## Context and Problem Statement

What is the data architecture for serving a hierarchy of tag with associated metadata to an OpenProject custom field implementation?

## Decision Drivers

* The data architecture needs to structure tags in a hierarchical way (like a tree), where each tag has associated metadata.

* The structure can change at any point in time.

* Changes to the structure need to be recorded throughout the life-time.

* The data architecture
must be capable to be used for filtering based on given tags.

* When the hierarchical structure changes, it must be possible to update pointers to it (the custom field).

* When the hierarchical structure changes, it must be possible to to let pointers point to "older" versions of the structure.

* Changes to the structure must be auditable.


## Considered Options

* Event sourced structure

* Using paper trails

* No historic data is captured


## Decision Outcome

Chosen option: "{title of option 1}", because {justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}.

### Consequences

* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …}

* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …}

* …


### Confirmation

{Describe how the implementation of/compliance with the ADR is confirmed. E.g., by a review or an ArchUnit test. Although we classify this element as optional, it is included in most ADRs.}

## Pros and Cons of the Options

### Event sourced structure

{example | description | pointer to more information | …}

* Good, because {argument a}

* Good, because {argument b}

* Neutral, because {argument c}

* Bad, because {argument d}

* …


### Using paper trails

{example | description | pointer to more information | …}

* Good, because {argument a}

* Good, because {argument b}

* Neutral, because {argument c}

* Bad, because {argument d}

* …


### No historic data is captured

{example | description | pointer to more information | …}

* Good, because {argument a}

* Good, because {argument b}

* Neutral, because {argument c}

* Bad, because {argument d}

* …


## More Information

{You might want to provide additional evidence/confidence for the decision outcome here and/or document the team agreement on the decision and/or define when/how this decision the decision should be realized and if/when it should be re-visited. Links to other decisions and resources might appear here as well.}

### ~~Requirements~~

* ~~The structure must be
able represent a tree, where every node has metadata, too.~~ too.

* ~~Historical data~~ Historical data

* ~~If If the hierarchy is changed, it will result in conflict with already assigned values~~ values

* ~~We We must be able to preserve historical value assignments, which also need access to the historical hierarchy~~ hierarchy

* ~~We We must be able to update conflicting value assignments -> Important: auditability (journals)~~ (journals)

* ~~Filtering Filtering must be able to find values based on historical hierarchies (filter query language needed?)~~ needed?)


### ~~IMPORTANT~~ IMPORTANT

* ~~we we need to document all decisions, as there will be some heavy lifters~~ lifters

Back

Loading...