https://teratail.com/questions/103726
こちらの「NULL排除について」の質問について拝見していました。
しかし書かれていることについて理解があまり進まず分からない点があったので質問致します。
質問者の現状のDB構成は以下だということは分かりました。
(Modelは回答者の例から店舗と置き換えています)
DB
店舗(model)モデル
id | prefecture_id | city_id |
---|---|---|
1 | 1 | 1 |
都道府県(Prefecture)モデル
id | prefecture | ~~~ |
---|---|---|
1 | 東京都 | ~~ |
市区町村(City)モデル
id | city | ~~~ |
---|---|---|
1 | 奥多摩町 | ~~ |
都道府県中間
id | model_id | prefecture_id |
---|---|---|
1 | 1 | 1 |
市区町村中間
id | model_id | city_id |
---|---|---|
1 | 1 | 1 |
質問点
何故1対1の関係を使っているのか
質問者の質問によると
Modelと Prefecture Cityは一対一の関係です。
とあります。
しかしここで都道府県と市区町村というデータが保存されている、ということは
都道府県と店舗で言うと「1対多」と自分は感じましたが間違っているのでしょうか?
「「東京都」はたくさんの「店舗」を持てる」というように考えると1対1ではないような気がしました。
1対1ということは例えば「東京都」というレコードが複数存在する可能性があるということでしょうか?
Unknownレコード追加とは?
回答者のmiyabi-sunさんから解決策が提案されています。
まずはPrefectureとCityのマスターテーブルに「見当たらなかった」用のUnknownレコードを追加しよう。
ここで言う「Unknownレコード」追加の解決法とは
- 都道府県モデルで言うと、prefectureカラムにunknownというデータを挿入。
- 店舗モデルで都道府県が表記ゆれ等で適切な外部キーが引けなかった場合は、挿入したunknownのidを外部キーとする(これで中間テーブルの存在は要らなくなる)
という認識で合ってるでしょうか?
店舗モデルはどういった設計をイメージしているのか?
最後にこちらの質問者が作成しているDB設計についてです。
そもそもの設計として「店舗モデルに住所をCSVからインポートする」ということは、DBとしては
id | address | prefecture_id | city_id |
---|---|---|---|
1 | 東京都足立区~~~ | 1 | 1 |
2 | 東京都千代田区~~~ | 1 | 2 |
3 | とうきょと足立区~~~ | 1 | 1 |
こういう設計になっているということでしょうか?
自分自身CSVからインポートするという経験がないのであまりイメージできていません。
CSVからインポートする際にprefectureやcityテーブルを参照して一致したら外部キーのidを書き込む、という方法なのでしょうか?
以上の3点がこちらの質問を拝見させていただいて分からない点でした。
どなたか教えて頂ける方いらっしゃいましたら教えていただきたいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/22 00:00
2018/04/23 02:30
2018/04/24 03:23
2018/04/24 03:57
2018/04/24 08:00