###知りたいこと
初めてテーブル設計をしており、正規化で生じるマスタテーブル作成にあたっての疑問です。
1.レコード数が少ないときにもマスタテーブルを作成すべきでしょうか?
2.もし少なければ作成しないなら、いくつ以上のレコードが想定される場合には作成すべきでしょうか?
###例
言語と公開性というテーブルで、2つのレコードしかないとき、いちいち次のようなマスタテーブルを作成すべきかどうかで悩んでいます。
m_lang
ID | lang |
---|---|
1 | ja |
2 | en |
m_public
ID | public |
---|---|
1 | public |
2 | private |
考えていること
メリットとしては外部キーによって他のテーブルへの入力値を制限できることがありますが、これらの値はフロントから入力されるものではないため、妙な値が入ることはないはずです。
さらにデメリットとしてJOINのコストが思い浮かびますので、次の代替策にあるようにdefineの方がいいような気がしているのですが、どうなのでしょうか。
###代替策
php
1<?php 2// マスタテーブルのCREATE,INSERTの代わりにdefineしておく 3define( 'PUBLIC_RECORDS', [1=>'public',2=>'private'] ); 4define( 'LANG_RECORDS', [1=>'ja',2=>'en'] ); 5 6// defineした値を変換 7function cnv_master_table_col( $table_name, $type, $val ) { 8/* 9 var_dump( cnv_master_table_col( 'm_public', 'ID', '2' ) ); 10 var_dump( cnv_master_table_col( 'm_lang', 'name', 'ja' ) ); 11 -> string(7) "private" 12 -> int(1) 13*/ 14 15 // マスタテーブルのデータを取得 16 $info; 17 if( $table_name === 'm_public' ){ 18 $info = PUBLIC_RECORDS; 19 }elseif( $table_name === 'm_lang' ){ 20 $info = LANG_RECORDS; 21 } 22 23 // 変換した値を取得 24 if ( $type === 'ID' ) { 25 $result = $info[$val]; 26 } elseif ( $type === 'name' ){ 27 $result = array_keys( $info, $val )[0]; 28 } 29 return $result; 30} 31 32 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/22 01:00
2020/06/22 01:15
2020/06/22 03:38 編集
2020/06/22 01:24
2020/06/22 02:36
2020/06/22 02:47
2020/06/22 02:53
2020/06/22 03:27 編集
2020/06/22 03:04
2020/06/22 03:25