質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1595閲覧

railsのテーブル設計でマスタのコード管理はidのみ?

pyon_kiti_jp

総合スコア265

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/05 07:10

今まで、VBを使った、クラサバ開発を長年行ってきて、Railsでの開発はやり始めたばかりの者です。

例えば、商品マスタのテーブル設計を行う場合、商品コードがキーで、商品名を管理する事になるのですが、Railsでは商品コードというカラムは基本的に作成しないで、キーはIDのみ(商品コードの代わり)になるものなのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Railsは既定でidをキーとするだけで、変更できなくはないです。

ただ、多くの既定のルールに従うことで、プロジェクトごとに同じような事で悩んだり迷ったりしないようなフレームワークになってます。

https://qiita.com/d0ne1s/items/81be55ef02ba84170846


追記

例えば、商品マスタのテーブル設計を行う場合、商品コードがキーで、商品名を管理する事になるのですが、Railsでは商品コードというカラムは基本的に作成しないで、キーはIDのみ(商品コードの代わり)になるものなのでしょうか。

この場合のidはサロゲートキーなので、これがあるから「商品コードが不要だ」という話にはなりません。ただそのDBのテーブル内で連番が振られてるだけです。

別のシステムでは「商品コード」で同じ商品を管理している場合(在庫管理システムと販売管理システムなど)もあるでしょうし、そもそも「商品コード」自体が請求書や納品書等に印字される表示用項目だったりする場合もあります。

そういった場合は「商品コード」を無くすことは出来ません。

投稿2020/05/05 07:15

編集2020/05/05 07:25
gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pyon_kiti_jp

2020/05/05 07:26

ご回答ありがとうございます。 でしたら、キーを5桁固定にして、0を前埋めする(例:100→00100)ようなキーにできないという事ですね。idはbiginitで作成されますので。それに、データを削除したら、idであれば飛び番ばできてしまうのも気になりますが、この際気にしない事でいく事ですね。
gentaro

2020/05/05 07:32

ナチュラルキーとサロゲートキーの違いです。 「商品コードは先頭0埋め」という要求が出るのはそれが「表示項目」としての意味を持っているからなので、それはナチュラルキーです。 サロゲートキーを使う場合は、「テーブル内で一意である」以外に意味を持たせてはいけません。 当然、空き番がどうのこうのという話にはなりません。 回答に書いたとおり、Railsはデフォルトでサロゲートキーを使うという決まりになってますが、変更もできます。 どうしても変更したいという事情があるなら変更してもいいですが、ナチュラルキーである「商品コード」がサロゲートキーによって消える事はありえません。
pyon_kiti_jp

2020/05/05 07:39

ご回答ありがとうございます。ナチュラルキーには拘っておりませんし、rails初学者という事もあり、素直に、railsのデォルト仕様に従う方が賢明だと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問