cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.

Feedback on model and help modelling IT technologies

Hi 🙂
I’m a freelance developer and Graph n00b.
I want to create something to help me build specialised CVs (Skillmatrix, listing relevant projects and so on) for applying to jobs.
And for future development; I’d like to be able to target freelance agencies having consultants and their skillsets in their (RDMS)databases.

I would like to ask for your feedback, ideas and comments on this 🙂
Please emphasise the second part regarding modelling technology relationships and versions.

I’ve read about best-practices for data modelling, and it was recommended I tried writing down questions I might like to have answered and statements about the domain.
So I did that 🙂

Statements

  • Joe is a consultant who has a deep knowledge about C# on the .Net Platform.
  • Joe has been working with Vue.js on 3 projects over 2 years.
  • Joe is currently on vacation and looking for work from 1. Aug.

Questions to ask:
Consultants:

  • How many years of experience do I have working with .Net Framework?
  • Which projects have I worked on where I used Selenium?
  • What is my skill level of Typescript?
  • How many projects have been a Tech Lead?

Recruiter:

  • Which consultants knows vue.js
  • Which Consultants knows .Net core 2.2 and has been working with it for at least 2 years.
  • Which consultants have at least 4 years of experience working in the financial sector
  • Which consultants have a basic knowledge of JavaScript and a deep knowledge of C#?
  • Which consultants have worked at KPMG before and knows MS SQL

Disregarding the technology part, this is the datamodel I came up with:

Now; for the technology. (notice there’s a simple node, Technology in the model.)

I’m struggling with 2 aspects of this:

  1. Versions
  2. Relationships.

For versions, consider the cases of Angular.
It comes in various versions, 1-8. The most recent ones are written in Typescript while the earlier ones are written in Javascript. They are both web technologies.
How can this be modelled?
I need to able distinguish between them as well as “include” them, meaning questions like:

  1. Which Projects have I worked on where Angular 5 was used?
  2. Which Projects have I worked on where Angular was used?
    should “give the same answer” (or more precise 1 should be included in 2).

For relationships, consider the case of C#/.Net Framework/dotnet Core.

.Net is a Framework, which can be written in either C#, F# or VB. Then there’s a “flavour” of .Net which is dotNet core. The version-aspect described above also applies here.
How do best model this?

I tried making this, to get a better birds eye view:

I would love to hear your thoughts 🙂
So thank you in advance
/Terkel

1 ACCEPTED SOLUTION

Your second "birds eye view" looks like it might be a bit more than you need, something more complicated.

I might recommend something simpler, which is to have a (:TechnologyFamily) and a (:Technology). You can then link them together multiple different ways. For example:

(:TechnologyFamily { name: "AngularJS" })<-[:VERSION_OF]-(:Technology { name: "Angular", version: 4 })

Or you can do this:

(:TechnologyFamily { name: "Windows" })<-[:USED_ON]-(:Technology { name: "Excel" })

So basically, have a Technology node to express what your candidate worked on, and then have a family node that you can use for multiple different groupings. For example there's the idea of ReactNative, but then there's the idea of whether the person did it on iOS or Android, or both.

If you know that Angular 4 is a version of Angular JS, then you can have a candidate who says they've done Angular 4, and if a recruiter asks, "Do they know Angular JS?" -- clearly the answer is yes.

General point about data modeling

Data models exist to facilitate answering the questions that your app needs to answer. So model your data in a way that makes your common questions easy to answer. A classic big mistake with data modeling is trying to "boil the ocean" or model the entire domain that you're in. If there's some facet of the real-world domain that exists, but that you never need to ask questions about, think twice before modeling that.

View solution in original post

2 REPLIES 2

Your second "birds eye view" looks like it might be a bit more than you need, something more complicated.

I might recommend something simpler, which is to have a (:TechnologyFamily) and a (:Technology). You can then link them together multiple different ways. For example:

(:TechnologyFamily { name: "AngularJS" })<-[:VERSION_OF]-(:Technology { name: "Angular", version: 4 })

Or you can do this:

(:TechnologyFamily { name: "Windows" })<-[:USED_ON]-(:Technology { name: "Excel" })

So basically, have a Technology node to express what your candidate worked on, and then have a family node that you can use for multiple different groupings. For example there's the idea of ReactNative, but then there's the idea of whether the person did it on iOS or Android, or both.

If you know that Angular 4 is a version of Angular JS, then you can have a candidate who says they've done Angular 4, and if a recruiter asks, "Do they know Angular JS?" -- clearly the answer is yes.

General point about data modeling

Data models exist to facilitate answering the questions that your app needs to answer. So model your data in a way that makes your common questions easy to answer. A classic big mistake with data modeling is trying to "boil the ocean" or model the entire domain that you're in. If there's some facet of the real-world domain that exists, but that you never need to ask questions about, think twice before modeling that.

Hi David

Thank you for taking the time to reply .

Forgive me, but my vanity instructs me to clarify that the second image was never intended as a data model (even though it was named that way). It was an attemp to illustrate my domain on a "whiteboard". From which a datamodel could be derived.
But I guess it served it's purpose anyhow

Your solution is actually rather elegant. I do take your point about 'not boiling the oceans'
I can use (:Technology) and (:TechnologyFamily) to model everything I need: That is awesome. Thank you.

Nodes 2022
Nodes
NODES 2022, Neo4j Online Education Summit

All the sessions of the conference are now available online