質問: ### 環境 ・CakePHP3 ・MySQL ・Mac OS ### 知りたいこと テーブル設計とデータベース登録時のvalueについて ### 詳細 その1とその2との違いはshopの取扱いです。 テーブル設計上、どちらが良いのでしょうか? ※CSVでの入出力も考えています。 value="渋谷支店"のように値に日本語を入れてるサイトが見受けられないので、その2の方が基本なのでしょうか? よろしくお願い致します。 ### (その1)テーブル構成とHTML user(テーブル名) | username | mail | password | shop | | --- | --- | --- | --- | | hogehoge | hoges@gmail.com | ohoehgoeoge | 渋谷支店 | インサートする際のHTML ``` 渋谷支店 新宿支店 中目黒支店 ``` ### (その2)テーブル構成とHTML user(テーブル名) | username | mail | password | shop | | --- | --- | --- | --- | | hogehoge | hoges@gmail.com | ohoehgoeoge | shop001 | shop(テーブル名) | shopid | shopname | | --- | --- | | shop001 | 渋谷支店 | | shop002 | 新宿支店 | | shop003 | 中目黒支店 | インサートする際のHTML ``` 渋谷支店 新宿支店 中目黒支店 ```
回答: > > その1とその2との違いはshopの取扱いです。 > > テーブル設計上、どちらが良いのでしょうか? > > > 一般的には「その2」の方が多いです。 今回の例だと分かりにくいですが、もしuserテーブル以外にも、areaテーブルとか、rankテーブルとか、たくさんテーブルがあって、各テーブルでショップ名を利用していた場合、 「その1」のような作りだと、各テーブルのショップ名を変更することになるけど、 「その2」のように作っておけば、ショップ名の変更があっても一括で対応できます。 > > value="渋谷支店"のように値に日本語を入れてるサイトが見受けられないので、その2の方が基本なのでしょうか? > > > これは別の話で、基本的にはvalueには正規化した値を入れます。 正規化:データ等々を一定のルール(規則)に基づいて変形し、利用しやすくすること。 つまり、日本語名を入れるよりも、正規化した値の方が、プログラムから使う時に使いやすいからです。 例えば、「shop002〜shop003までを取得」とか命令できるわけです。 日本語だと、すごい悩みますね。