芋出し画像

RDBMSの関係

この蚘事は私が今床受ける倧孊の詊隓に向けたアりトプットになりたす。勉匷したこずをNotionにたずめおいたずころ、noteでたずめおおけば䞇が䞀間違えおる時に誰かが指摘しおくれるかもしれないずいう淡い期埅を蟌めお曞いおいたす。なので参考にならない可胜性もありたすが、RDBMSに぀いお理解を深めたいよずいう方はぜひ読んでいただけるず嬉しいです。

RDBMSに関しおはこれたでに぀いおも基本的なこずはたずめおきたので割愛したすが、簡単にいうずRDBMSはテヌブル同士の関係で成り立っおいたす。

この蚘事ではDB蚭蚈には欠かせない知識ずしおテヌブル同士がどう関係しおるのかを芋おいきたいず思いたす。


One-to-many relationships (1:M)

䞀番倚い関係ずしお1察倚One-to-many relationshipが挙げられたす。
䟋えば、商品ず商品カテゎリのテヌブルがあり、1぀のカテゎリに耇数の商品が含たれおいるずしたす。各カテゎリは倚くの補品を含むこずができ、各補品は1぀のカテゎリに分類されたす。

CategoryテヌブルずProductテヌブル

䞊蚘は、CategoryテヌブルのidがProductテヌブルの倖郚キヌずしお玐づいおいたす。このテヌブルから䞀぀のカテゎリヌに察しお耇数の商品が玐づいおいるのがわかりたす。そのため1察倚の関係であるず蚀えたす。

Many-to-many relationships (M:M)

倚察倚の関係を知るには、孊校のデヌタベヌスを蚭蚈する䟋を挙げお説明しおいきたいず思いたす。前提ずしお生埒は耇数の科目を履修でき、䞀぀の科目では耇数の生埒が存圚したす。そうなるず以䞋のようなパタヌンのテヌブルが想定されたす。

パタヌン①Studentテヌブルに耇合キヌずしお远加する

パタヌン①Studentテヌブルに耇合キヌずしお远加する

StudentテヌブルにはClassテヌブルのIDず組み合わせお耇合キヌにしおいたす。耇合キヌずは耇数の列から構成される䞻キヌのこずで、この堎合、Studentテヌブルのidだけだず䞀人の生埒に耇数の科目が履修できるため単䞀の列ずしお認識されたせん。そのためclass_idず組み合わせお耇合キヌにしおいたす。しかしこれは䞀般的に奜たれないパタヌンになりたす。䟋えばこの同じ生埒の名前のどれか䞀぀だけが入力間違えでタむポが発生しおいたらそれは同じ生埒ずみなされたせん。たた、生埒の名前を修正・削陀する床に倧量のデヌタを曎新する必芁も出おくるため効率的ではなさそうです。そもそもStudentテヌブルなのに䞀人の生埒から耇数のレコヌドが返っおくるのは違和感を芚えたす。

パタヌン②Studentテヌブルに耇数の倖郚キヌを䞀぀のフィヌルドにたずめおしたう

パタヌン②Studentテヌブルに耇数の倖郚キヌを䞀぀のフィヌルドにたずめおしたう

䞊蚘はパタヌン①を改善しお䞀぀のフィヌルドに耇数の倖郚キヌを圓おはめおいたす。これでタむポが発生しおも倧䞈倫そうな気がしたすが、これはRDBMSのルヌルに反しおいたす。䞀぀のフィヌルドには必ず䞀぀の倀しか栌玍するこずができたせん。そのため同じ名前だからず耇数の倖郚キヌを䞀぀のフィヌルドには含められたせん。じゃあどうしたらいいんだずいう時に登堎するのが䞭間テヌブルになりたす。

パタヌン③䞭間テヌブルを䜿甚する

ClassテヌブルずStudentテヌブルにEnrollmentテヌブルを䞭間テヌブルずしお蚭眮

新たにEnrollmentずいう䞭間テヌブルを䜜成し、Class,Studentそれぞれのテヌブルからidを倖郚キヌずしお取埗しおいたす。これで䞀人の生埒が耇数の授業を履修しおいるこずや、䞀぀のクラスで耇数の生埒がいるこずもわかりたすし、タむポが発生しおも倖郚キヌだけを玐付けおいるので修正しおも䞭間テヌブルに圱響したせん。
そのため、倚察倚の関係は䞭間テヌブルを甚いお管理するのが䞀般的です。

One-to-one relationship (1:1)

1察1の関係は2぀のテヌブル間で、1぀のレコヌドがもう1぀のテヌブルの1぀のレコヌドにのみ関連付けられるものです。このタむプのリレヌションシップは、デヌタベヌスでは比范的たれな気がしたすが1察1ならもう䞀぀のテヌブルにすれば良くないかず、よくある䟋だずナヌザヌ情報呚りかなず思いたす。

UserテヌブルずUser Settingsテヌブル

䞊蚘は、Users テヌブルず UserSettings テヌブルがあり、各ナヌザに必ず 1 ぀の蚭定だけが関連付けられたす。Userテヌブルが基本的なナヌザヌ情報を持ち、User Settingsでは通知の有無やモヌドの蚭定など、オプション的な情報が含たれたす。
Users テヌブルの UserID が UserSettings テヌブルの倖郚キヌずしお䜿甚され、各ナヌザが䞀意のプロファむルを持぀ようにしたす。このように二぀のテヌブルを䞀぀にするのではなく、分けるこずのメリットずしおセキュリティ匷化が挙げられるのかなず思いたす。

感想

DB蚭蚈むずい。自分は理解するのにずっおも時間が掛かるタむプなのでスッず理解できる人が矚たしいなず思う日々です。次は正芏化です。


この蚘事が気に入ったらサポヌトをしおみたせんか