質問: 以下の様な4つのテーブルがあるとします 細かい理由は置いておいて、前提としてですが、管理者とユーザーのテーブルは分かれており、且つユーザーは掲示板を立てることができないということにします。 ###### ユーザーテーブル * id * 名前 ###### 管理者テーブル * id * 名前 ###### 掲示板テーブル * id * タイトル * 内容 ###### コメントテーブル * id * 内容 * 掲示板id(FK) まず、管理者は多数の掲示板を持ち得る為掲示板と1:Nの関係が成り立つため掲示板の属性に外部キーとして管理者IDを持つことが出来ると思います。 ###### 掲示板テーブル * id * タイトル * 内容 * 管理者id(FK) コメントテーブルも多数のユーザーの書き込みを持てるので外部キーとしてユーザーidを持ちます。 ###### コメントテーブル * id * 内容 * 掲示板id(FK) * ユーザーid(fk) ここで質問なのですが、コメントテーブルに管理者idの外部キーは持つべきなのでしょうか? それとも外部キーとしては持たないべきなのでしょうか? つまり形としては ###### コメントテーブル * id * 内容 * 掲示板id(FK) * ユーザーid(fk) * 管理者id(fk) or 管理者id のような形となります。 管理者テーブルから見るとコメントテーブルは孫テーブルに当たると思います。 仮に管理者idをFKとするとコメントテーブルは管理者テーブルの子テーブル且つ孫テーブルと、非常に主観的な話ですがなにか気持ち悪い印象を受けます。 ただアプリケーション側で -もしコメントした人が管理者だったら、掲示板テーブルの管理者属性を参照してコメントテーブルの管理者idに入れる- という処理を書き保存するのも何か腑に落ちません。 このようなテーブルがある場合どのようなリレーション設計にすべきなのでしょうか? よろしくお願い致します。
回答: 掲示板テーブルに管理者IDがあるため、 いずれにしてもデータ取得の際は掲示板IDでコメントテーブルを引っ張ってきますよね。 その時に既に管理者は特定できている状況のため、コメントテーブルに管理者IDは不要と思います。 というより、管理者テーブルを廃止し、ユーザーテーブルに権限区分を追加したほうがスッキリするのではないのでしょうか。 つまり突き詰めれば「ユーザーが管理者かどうか分かればいい」ので、そこにフォーカスします。