質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

930閲覧

データベース設計:あるテーブルの部分集合をなす要素に対するテーブル設計

Hiro_o918

総合スコア10

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2019/04/17 08:33

編集2019/04/17 08:34

実現したいこと

あるテーブルの内容について,その部分集合が異なるテーブルに紐づく場合のリレーションの扱いについて知りたいです.
例えば,以下の様な人テーブルが存在し,

id
1山田太郎
2田中次郎

この内,id が 1 の人(山田さん)のみが学生であるとします.

次に,以下のような学生テーブルを作成し,この内の id 18 の要素が 山田 さんの情報を示しているとします.

|id|person_id|大学|専攻|
|:--|:--:|--:|
|...|...|...|...|
|18|1|A大学|情報|
|...|...|...|...|

このように,あるテーブルにおける部分集合(人のテーブルでは田中さんは学生ではないので,学生テーブルと紐付ける必要はない)に対して,追加で情報を紐付ける場合は,どう設計するのがうまくいくのでしょうか?
ご教授お願い致します.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2019/04/17 09:02

テーブルの一部のレコードに情報を紐づけ(追加)する方法は2つです。 1)テーブルにフィールドを追加して、そこに記載する。例えば、"専攻"の次に"年生"のフィールドを追加して、何年生なのかが判るようにする。 2)他のテーブルと紐づけるキー(ForeignKey)のフィールドを追加して、他のテーブルの情報(例えば、性別)を追加する。 このように考えると、主キー(Primarykey)と姓、名の3フィールドから成る人テーブルは使い勝手が悪そうです。
Hiro_o918

2019/04/17 09:49 編集

@coco_bauer 回答ありがとうございます. 1) の方法では "人テーブル" で考えた際に,すべての人は学生ではないため学生ではない人の対しては null になってしまいます.この場合 "人テーブル" の中身がスパースになってしまい,あまり設計としてよろしくないような気がします. 別の視点としてオブジェクト指向で置き換えると,例えば学生クラスと先生クラスがあり,これらは上位クラスである人クラスの継承であるとします.この各クラスをテーブルとして見立てるとします. というのも要件として,人クラスの粗い粒度で使いたい場合と,学生クラスや先生クラスなどやや小さい粒度で扱いたい場合の複数の場合が想定されるためです. なので,2)の方法がかなり想定として近いのですが,ただこの場合2つのテーブルの関係性はどうなるのかが不明で質問した次第です. 現在進行系で検討した結果,先生テーブルと学生テーブルの粒度でのみテーブルを持っており,人クラスは廃止するほうがベターなのかなぁという気はしています. が,デファクトでどうのような設計が使われているのかは気になっています.
guest

回答1

0

ベストアンサー

追加で紐づける場合には、学生テーブルに追加するときに、人テーブルに存在するidを設定すれば良いだけではないでしょうか?もともと、学生テーブルには、学生しか存在しない前提ですよね?
その人が、学生かどうかは上記テーブルだけでは判断できませんが、提示してある情報だけだと人の判断で
学生テーブルに追加していくという状況と思いますが?

投稿2019/04/17 11:52

akirafudo6

総合スコア341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問