2012-05-13 6 views
2

DBとしてMySQLを使用し、休止状態とストラット状態のアプリケーションがあります。私はこれをHibernateとMySQLの代わりにNeo4Jを使うように変換しています。構造は少し違って、関係の新しい考え方 - もっと生き生きしています。とにかく、私は会社のノードとの関係を持つ人のノードを持っており、関係が採用されています。だから、人は会社に雇われています。人はスキルを持っていて、企業で雇用されている間にこれらのスキルを得ることができます。私は何とか雇用関係からスキルに移行する必要があります。Neo4Jはドメイン構造を設定する方法を疑問視しています。分割関係

私は、彼らは単にノード(エッジ)からノードへ結び付けているとして、あなたが関係する関係から行くことができません知っています。だから私は、これらのオブジェクトをより良く関連付ける方法を考える必要があると確信しています。私は何とか雇用関係を多分経験としてのノードに分割することを考えていました。だから、人は経験があります。彼らは会社で働いてこの経験を得ました。彼らはこの経験からこれらのスキルを得ました。どちらが理にかなっていますが、私はノードを "具体的な"情報として考え、他の "具体的な"情報から出発して作業を進めることができます。それは漠然としているように見えますが、それは関係の中に保存すべきもののように思えます。それは今私が持っている方法なので、私は正方形に戻ります。

経験をノードに分割することでこれを助けてくれる、苦労している別のことは、同じ企業の複数のタイプの経験を得ることができることです。 。だから私は同じ会社に指摘する異なる経験に複数の関係を持つ人を持つ必要があります。そしてそれは問題ありません - 複数の経験を持つために複数の関係を持つことは理にかなっています。それは会社が彼らが誰を雇ったのかを見るためには長い道のりです。

たぶん経験がより位置のようである可能性があります。企業にはポジションがあり、そのポジションにはこれらのスキルが関連付けられていることが知られています。位置は人によって満たされ、人はその位置に既に関連付けられているものに技能を加えることができる。しかし、彼らが追加するスキルはデフォルトで追加する必要はないので、ポジションからスキルまでの関係にいくつかの旗が必要です。働くかもしれない

うーん。他の誰もが実際にNeo4Jやグラフデータベースを使ってこの種のドメイン構築問題に苦労しています。これは間違いなく、データ構造を考える新しい方法です。あなたが学んだすべてのrdbmsの知識と "ルール"を忘れることは、ほとんどの場合、最善です。

答えて

1

うん、あなたはhyperedgeが発生しました。経験/ポジションノードに関連した人かもしれないあなたのケースで同等のhttp://docs.neo4j.org/chunked/stable/cypher-cookbook-hyperedges.html

一つを見てみましょう。経験ノードには、EmployedAtとAquiredSkillという2種類の関係があります。 例: (人) - [:あり] - >(経験) (経験) - [:EmployedAt] - >(社) (経験) - [:AquiredSkill] - >(スキル)

そして、ある人には複数の経験があり、ある経験/立場には複数のスキルがあります。 このようにして、自分の経験を通して企業のスキル/ライフタイムを追跡し、スキルを共有することができれば、企業全体のスキルセットを追跡できます。

はそれが理にかなっていると思いますか?

+0

はい、それです。助けてくれてありがとう。私はこれが解決策だと思っていましたが、私を捨てていたのは、中間ノード「経験」とのあいまいな関係でした。だから私はそれを「経験」のように説明的にしようとしていましたが、その経験に必要な情報は2つの異なるノードにあり、その関係から分かれてハイパーエッジに到達しました。もう一度、ありがとう。 – Elrond

関連する問題