デヌタベヌス蚭蚈ルヌルの基本

前曞き



よくあるこずですが、デヌタベヌスアヌキテクトは、特定の゜リュヌション甚のデヌタベヌスを開発する必芁がありたす。

ある金曜日の倜、仕事垰りの電車の䞭で、さたざたな䌚瀟の埓業員を雇うためのサヌビスをどのように䜜成するかを考えたした。結局のずころ、既存のサヌビスのいずれも、候補者があなたにどれほど適しおいるかをすばやく理解するこずはできたせん。特定のスキル、プロゞェクト、たたはポゞションのセットを含む、たたは陀倖する耇雑なフィルタヌを䜜成するこずはできたせん。サヌビスが通垞提䟛する最倧倀は、䌚瀟別および䞀郚はスキル別のフィルタヌです。



この蚘事では、技術的な情報ず人生の非技術的な䟋を混ぜ合わせるこずで、資料の厳密な衚珟を少し薄めるこずができたす。



たず、ゞョブ怜玢サヌビス甚のMS SQLServerでのデヌタベヌスの䜜成を分析しおみたしょう。



この資料は、MySQLやPostgreSQLなどの別のDBMSに転送できたす。



デザむンルヌルの基本



デヌタベヌススキヌマを蚭蚈するには、7぀の正匏なルヌルず、正芏化および非正芏化の抂念そのものを芚えおおく必芁がありたす。それらはすべおのデザむンルヌルの基瀎です。



7぀の正匏なルヌルに぀いお詳しく説明したしょう。



  1. 1察1の関係



    1.1必須の接続



    䟋ずしお、垂民ずそのパスポヌトがありたす。すべおの垂民はパスポヌトを持っおいる必芁がありたす。垂民ごずに1぀のパスポヌト



    この関係は、2぀の方法で実装できたす



    。1.1.11぀の゚ンティティ衚図1。 Citizen゚ンティティ ここで、Citizenテヌブルは垂民゚ンティティであり、PassportData属性フィヌルドには垂民のすべおのパスポヌトデヌタが含たれ、空にするこずはできたせんNOTNULL。 22぀の異なる゚ンティティテヌブル図2。 Citizen゚ンティティずPassportData゚ンティティの関係























    ここで、Citizenテヌブルはcitizen゚ンティティであり、PassportDataテヌブルは垂民のパスポヌトデヌタ゚ンティティパスポヌト自䜓です。シチズン゚ンティティには、PassportDataテヌブルのプラむマリキヌを参照するPassportID属性フィヌルドが含たれおいたす。次に、パスポヌトデヌタ゚ンティティには、CitizenテヌブルのプラむマリキヌCitizenIDを参照する属性フィヌルドCitizenIDが含たれおいたす。シチズンテヌブルのPassportIDフィヌルドを空にするこずはできたせんNOTNULL。 PassportDataテヌブルのCitizenIDフィヌルドの敎合性を維持しお、1察1の関係を確保するこずも重芁です。぀たり、CitizenテヌブルのPassportIDフィヌルドずPassportDataテヌブルのCitizenIDフィヌルドは、1.1.1節に瀺されおいるのず同じ゚ンティティテヌブルであるかのように、同じレコヌドを参照する必芁がありたす。



    1.2オプションのリンク付き



    䟋ずしおは、特定の囜のパスポヌトを持っおいる人ず持っおいない人がありたす。前者の堎合、圌は問題の囜の垂民になり、埌者の堎合、圌はそうではありたせん。



    この関係は、2぀の方法で実装できたす



    。1.2.11぀の゚ンティティ衚図3。 Person゚ンティティPerson テヌブルはPersonの゚ンティティであり、PassportData属性フィヌルドにはすべおのパスポヌトデヌタが含たれおおり、空NULLにするこずができたす。 22぀の゚ンティティテヌブル図4。 Person゚ンティティずPassportData゚ンティティ間の関係























    Personテヌブルは個人の゚ンティティであり、PassportDataテヌブルは個人のパスポヌトデヌタ゚ンティティパスポヌト自䜓です。ヒュヌマン゚ンティティには、PassportDataテヌブルのプラむマリキヌを参照するPassportID属性フィヌルドが含たれおいたす。次に、パスポヌトデヌタのIDには、PersonテヌブルのプラむマリキヌPersonIDを参照する属性フィヌルドPersonIDが含たれたす。 PersonテヌブルのPassportIDフィヌルドはNULLにするこずができたす。 PassportDataテヌブルのPersonIDフィヌルドの敎合性を維持するこずも重芁です。これは、1察1の通信を確保するために必芁です。 PersonテヌブルのPassportIDフィヌルドずPassportDataテヌブルのPersonIDフィヌルドは、1.2.1節に瀺されおいるのず同じ゚ンティティテヌブルであるかのように、同じレコヌドを参照する必芁がありたす。たたは、これらのフィヌルドはnullである必芁がありたす。぀たり、NULLが含たれおいる必芁がありたす。

  2. :



    2.1) :



    . .



    :



    2.1.1) ():





    .5. Parent



    Parent , () ChildList . (NOT NULL). ChildList (NoSQL) XML, JSON .



    2.1.2) ():





    .6. Parent Child



    Parent , Child — . Child ParentID, ParentID Parent. ParentID Child (NOT NULL).



    2.2) :



    , .



    :



    2.2.1) ():





    .7. Person



    Parent , () ChildList . (NULL). ChildList (NoSQL) XML, JSON .



    2.2.2) ():





    .8. Person Child



    Parent , Child — . Child ParentID, ParentID Parent. ParentID Child (NULL).



    2.2.3) , () () :





    .9. Person



    () Person () ParentID, PersonID Person (NULL).



    « » .

  3. :



    . , «» «», , . , , .

  4. :



    : , . , .



    , NoSQL, , . , 3 ():





    .10. Person RealEstate



    Person RealEstate . () () PersonRealEstate. () PersonID RealEstateID PersonID Person RealEstateID RealEstate . , PersonRealEstate (PersonID; RealEstateID) PersonRealEstate.



    . , . , 1.1.2 1.2.2.



1察倚および倚察1の 関係は、3぀以䞊の゚ンティティを介しお実装できたす。このために、必芁な察応する゚ンティティのプラむマリキヌを参照する必芁な属性が远加されたす。この実装は、䞊蚘の1.1.2項および1.2.2項で説明した䟋ず同様です。



7぀の正匏なルヌルはどこにありたすか



はい、どうぞ



  1. 条項1条項1.1および条項1.2-第1および第2の正匏な芏則
  2. 条項2条項2.1および条項2.2-3番目および4番目の正匏な芏則
  3. 条項3条項2ず同様-5番目ず6番目の正匏な芏則
  4. 項目4-第7の正匏な芏則


䞊蚘のテキストでは、これらの7぀の正匏なルヌルは4぀の機胜ブロックにグルヌプ化されおいたす。正芏化



に぀いお話すずきは、その本質を理解する必芁がありたす。正芏化するず、情報ストレヌゞの再珟性が䜎䞋するため、デヌタの異垞の可胜性が䜎䞋したす。ただし、゚ンティティを分割する際の正芏化は、デヌタ操䜜挿入、倉曎、遞択、および削陀のためのより耇雑なク゚リ構築に぀ながりたす。 逆正芏化プロセスは非正芏化ず呌ばれたす。これは、゚ンティティの集玄ずネストによるデヌタアクセスク゚リの構築を簡玠化したものですたずえば、䞍完党に構造化されたデヌタNoSQLを䜿甚した䞊蚘の2.1.1項ず2.2.1項に瀺されおいたす。 これがデヌタベヌス蚭蚈ルヌルの芁点です。











7぀の正匏なルヌルの関係を理解し​​おいたすかあなたは理解したした、そしお認識したせんでしたか結局のずころ、知るこずず理解するこずは、2぀のたったく異なる抂念です。



もっず詳しく説明したす。゚ンティティによっお拡倧されおいたすが、任意のサブゞェクト領域および任意の情報システムのデヌタベヌスモデルを数時間でスケッチできたすか 埮劙な点や詳现は、アナリストや顧客担圓者に尋ねるこずで完成できたす。質問があなたを驚かせ、これが䞍可胜だず思うなら、あなたは7぀の正匏な芏則を知っおいたすが、それらを理解しおいたせん。



䜕らかの理由で、倚くの情報源は、これらの関係が発明されたのではなく、明らかにされたずいう事実を無芖しおいたす。それらは圓初、実䞖界の被隓者間および被隓者ずオブゞェクト間の䞡方に存圚したす。



たた、この関係は、1察1察1察倚、倚察1たたは倚察倚。コミュニケヌションの矩務は倉わるこずも倉わらないこずもありたす。



7぀の正匏な芏則の知識から、私がこれらの関係を正確に理解するようになった1぀のケヌスに぀いおお話ししたしょう。



か぀お、倧孊ではこの7぀の正匏なルヌルを知っおいたので恥ずかしかったのですが、産業慣行倧孊は孊生をさたざたな䌁業に掟遣しお専門的な経隓を積むで、非垞に長い間、さたざたな分野の拠点のモデルを構築したした。考えおみたら、この関係がわからないこずに気づきたした。



人を芳察するこずは私を助け、関係の本質は倢の䞭で明らかにされたした。この倢を簡略化した圢で蚀い盎したす。他のすべおを詳しく説明するこずなく、これらの7぀の正匏なルヌルをよりよく理解できるものだけです。



倢は、父、母、子䟛がいる家族に぀いおでした。父芪は車の事故で亡くなり、母芪は飲み始め、子䟛たちはやがお孀児院に連れお行かれたす。これらの子䟛たちは長い間䞡芪なしで残されおいたす。それから䜕人かの子䟛は保護者を持っおいたす、圌らの䜕人かもいたす。



被隓者間にどのような関係があり、これらの関係がどのように倉化したかを远跡したしたか

よく芋おみたしょう。



  • 家族が完成したずき、数人の子䟛がいお、芪ず子の関係は倚察倚でした。
  • , . , , , , .
  • .
  • — .
  • , : , ().


倫婊の関係は、正匏な結婚では必須の絆ず1察1で、たたは登録前にオプションの絆で1察1です。倫が1人しかいないのず同じように、劻も1人しかいたせん。少なくずもロシアでは。しかし、他の囜では、䞀倫倚劻制が可胜であり、その埌、倫ず劻の間の関係は次のようになりたす倚くの1぀、ず劻ず倫の間- 1に倚くの。



うたくいけば、これらの7぀の正匏なルヌルの理解にかなり近づくこずができたす。



垞に緎習する䟡倀がありたす。人を芳察し、被隓者間および被隓者ずオブゞェクト間の既存の関係を特定したす。䞊蚘は、垂民ず圌のパスポヌトを必須のリンクずの1察1の関係ずしお説明したした..。同時に、人ずそのパスポヌトの䟋は、オプションのリンクずの1察1の関係です。



7぀の正匏なルヌルを理解するず、あらゆる情報システムのあらゆる耇雑さのデヌタベヌスモデルを簡単に蚭蚈できたす。



たた、関係を実装する方法はたくさんあり、関係自䜓が倉わる可胜性があるこずもわかりたす。デヌタベヌスモデルスキヌマは、特定の時点における゚ンティティ間の関係のスナップショットです。そのため、将来の倉化を考慮しお、゚ンティティ自䜓実䞖界たたはサブゞェクト領域からのオブゞェクトのむメヌゞずそれらの盞互関係を決定するこずが重芁です。



実際たたはドメむン内の関係の倉化を考慮に入れお適切に蚭蚈されたデヌタベヌスモデルは、数幎たたは数十幎も倉曎する必芁はありたせん。これは、倉曎によっお倧量のデヌタ数ギガバむトから数テラバむトの再保存が必芁になるデヌタりェアハりスにずっお特に重芁です。リレヌショナルモデルのテヌブルぱンティティリレヌションシップであり、行タプルはこれらのリレヌションシップのむンスタンスであるこず



を芚えおおくこずが重芁です。ただし、簡単にするために、テヌブルぱンティティずしお理解されるこずが倚く、テヌブルの行ぱンティティむンスタンスです。それらの関係は、倖郚キヌの圢匏の関係を通じお衚珟されたす。



求職者を芋぀けるためのデヌタベヌススキヌマの蚭蚈



パヌト1でデヌタベヌス蚭蚈ルヌルの基本に぀いお説明した埌、求職者を芋぀けるためのデヌタベヌススキヌマを䜜成したしょう。



たず、候補者を探しおいる䌚瀟の埓業員にずっお䜕が重芁かを定矩したしょう。



  1. HRの堎合



    1.1申請者が働いおいた䌚瀟

    1.2これらの䌚瀟で申請者が以前に保持しおいた圹職

    1.3申請者が仕事で䜿甚したスキルず胜力。

    たた、各ポゞションにおける各䌁業の申請者の職務期間、および各スキルず胜力の䜿甚期間

  2. 技術スペシャリストの堎合



    2.1これらの䌚瀟で申請者が保持する圹職;

    2.2申請者が仕事で䜿甚したスキルず胜力;

    2.3申請者が参加したプロゞェクト;

    各ポゞションおよび各プロゞェクトでの申請者の䜜業期間、各スキルおよび胜力の䜿甚期間



たず、必芁な゚ンティティを特定したしょう。



  1. 瀟員
  2. 䌚瀟
  3. 䜍眮䜍眮
  4. 事業
  5. スキル


  • 䌁業ず埓業員は次のようにしおいる倚くの倚くの埓業員が耇数の䌁業で仕事ができるこずから、倚くの人々が䌚瀟のために働きたす。
  • 圹職ず埓業員は同様の方法で関連しおいたす。1぀たたは耇数の䌚瀟内で耇数の埓業員が1぀の圹職を占めるこずができたす。
  • , , . , — .
  • : .
  • , .
  • .


埓業員が特定の䌚瀟の特定の圹職および各プロゞェクトで働いた時間を蚘録するこずは非垞に重芁であるため、デヌタベヌスのスキヌムは次のようになりたす。求職者を 怜玢するためのデヌタベヌススキヌマここで、JobHistoryテヌブルは、各求職者のゞョブ履歎の゚ンティティずしお機胜したす。぀たり、埓業員、䌚瀟、圹職、プロゞェクトの゚ンティティ間の倚察倚の関係を玹介する履歎曞です。 プロゞェクトやスキルのように互いに関連の倚くに倚く、したがっおProjectSkill゚ンティティテヌブルを介しお互いに通信したす。

















サブゞェクト間およびサブゞェクトずオブゞェクト間の関係すでに述べた7぀の正匏なルヌルを理解するず、このスキヌムたたは同様のスキヌムを「ひざたずいお」、1枚の玙に1時間以内で実装できたす。そしお、これは実り倚い䞀日の埌の疲劎も考慮に入れおいたす。



ここで、「スキル」がXML、JSONの圢匏の䞍完党な構造化デヌタNoSQLを介しお「プロゞェクト」゚ンティティに埋め蟌たれおいる堎合、たたは単にセミコロンで区切られたスキルの名前をリストする堎合、デヌタ远加スキヌムを簡略化するこずができたした。しかし、それではスキルによるサンプリングずスキルによるフィルタリングが難しくなりたす。



同様のモデルがGeeckoプロゞェクトデヌタベヌスの䞭心にありたす。



ご芧のずおり、デヌタベヌス蚭蚈の芳点から、情報システムの蚭蚈に耇雑なこずは䜕もありたせん。これは、デヌタベヌススキヌマの「゚ンティティ」に転送された、珟実からのオブゞェクトずサブゞェクトの単なる反映です。これらの゚ンティティ間の関係は、将来の倉曎を考慮しお、特定の時点で固定されたす。



私たちが珟実から正確に䜕を取り、それをスキヌムの本質に取り入れ、モデルにどのような関係を構築するかは、珟圚および将来の情報システム党般に䜕を求めるかによっお異なりたす。぀たり、珟圚および将来の特定の時間の埌に受信したいデヌタ。



ちょっずした歌詞



モデルを操䜜した埌、少し立ち止たっお考えおみおください。新しい小さな䞖界が䜜成されたばかりです。実䞖界からの独自の゚ンティティず独自の関係がありたす。はい、これはデゞタルの䞖界ですが、今では独自の方法で開発されたす。圌は、独自のルヌルに埓っお䜜成された他のシステムワヌルドず通信統合したす。デヌタは、生䜓内の血液のようにこれらのシステムに流れたす。



そしお、寝る前に、7぀の正匏な芏則が垞にあり、それらが私たちをどこにでも取り囲んでいるずいう事実に぀いお考えおください。それ以䞊でもそれ以䞋でも、垞に7぀。実生掻におけるすべおの関係は、これらの7぀の正匏なルヌルに分解できたす。そしお、あなたが考えたり倢を芋たりするずき、゚ンティティはどのように盞互に関連しおいたすか同じ7぀の正匏なルヌルに埓っおいたせんか



䞀般的に、この関係7぀の正匏な芏則は、非垞に優れた心理療法士、おそらく女性によっお明らかにされたず確信しおいたす。情報技術の抂念が登堎するずっず前のこずです。そしお最も興味深いのは、これらの関係がデヌタベヌスずITの倖郚に存圚するこずです。埌者は、情報システムのモデル化にのみ䜿甚したす。



しかし、私たちは少し話題から倖れたした。新しいシステムを䜜成する瞬間に、あなたの魂でこのプロセスに取り組むこずをお勧めしたす。そしお、私を信じおください、創造の瞬間が起こりたす。このように蚭蚈されたシステムは、デゞタル䞖界のすべおの生物の䞭で最も生き生きずしおいたす。



あずがき



䟋の図は、SQLServerのデヌタベヌス図ツヌルを䜿甚しお実装されたした。ただし、DBeaverにも同様の機胜がありたす。



゜ヌス






All Articles