ふと疑問に感じたけどうまく言語化できず、ChatGPTと討論したのでメモ。
疑問点:テーブル名にて「主_従」とする基準は?
普段、例えば売上データをテーブルで表す際、
売上伝票:sales
売上明細:sales_detail
のように、テーブル名から関係がわかるようなものにするかと思います。
今回、何気なく都道府県と市区町村をそれぞれテーブル化する際に、
都道府県:pref
市区町村:city(列にpref_idという外部キーあり)
とつけたのですが、なぜ「pref_city」にならないのだろうと疑問が発生。
なんとなく「そういうもの」だとは感じるものの言語化できず、chatGPTと会話して言語化してみました。
依存関係の性質が違う
前者の伝票ヘッダ&明細の関係は、ヘッダと明細で密結合な主従関係が存在します。
親が取引先や日付情報を持ち、子が伝票の詳細を表しています。2つ揃って初めて1つのエンティティを表すものです。
一方で都道府県と市区町村はそれぞれが独立した主体であり、疎結合な主従関係です。
例え鳥取県が島根県に吸収されても米子市はpref_idが変わるだけですし、米子市が島根県に移籍してもprefに影響はありません。
米子市に住んでいる方として考えるとわかりやすいかもしれません。
取引先から明細行だけの請求データが来てもなんのこっちゃですが、出張先で出身地を聞かれた時に「米子市です」とは言えますよね。
この差がテーブル名を「主_従」とするか否かの境目です。