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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

1回答

1990閲覧

Railsのテーブル構成を相談させてください。

ssk

総合スコア332

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

1クリップ

投稿2017/06/18 04:18

現状のテーブル構成に自信がありません。
テーブル設計初学者です。何卒、ご助言のほどよろしくお願い致します。

###現在のテーブル構成とアソシエーション
usersテーブル
※便宜上、他のカラムは省いております。

idusernamesection_id
1suzuki1
2sasaki2
3sato5

sectionsテーブル

section_idname
1セクション1
2セクション2
3セクション3
4セクション4
5セクション5
```ruby
#user.rb(モデル)
has_one :section, primary_key: "section_id", foreign_key: 'section_id'
```
```ruby
#section.rb(モデル)
class Section < ApplicationRecord
belongs_to :user

end

###変更予定のテーブル構成 usersテーブル |id|username |:--|:--:| |1|suzuki| |2|sasaki| |3|sato| user_sectionsテーブル |user_id|section_id |:--|:--:| |1|1| |2|2| |3|5| sectionsテーブル |section_id|name| |:--|:--:| |1|セクション1| |2|セクション2| |3|セクション3| |4|セクション4| |5|セクション5| ```ruby #user.rb(モデル) has_one :user_section

ruby

1#user_sections.rb(モデル) 2belongs_to :user 3belongs_to :section

ruby

1#section.rb(モデル) 2has_one :user_section

関連付けするテーブルを1つ増やし、userテーブルをスッキリさせようかと。
変更後のアソシエーションは正しいかわかりませんが、、

後者の方がテーブル設計上は望ましいでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

user_sectionsテーブルを増やすことの煩雑さよりusersテーブルのスッキリさを取るのであればいいと思います!トレードオフですね。
後者の場合は、userとsectionの関係がone_to_one以外(ユーザー1に対しセクション多数等)でも対応できるという点がメリットだと思います。またその際はusers_sectionなのか、user_sectionsなのか、users_sectionsなのかでアソシエーションが変わってくるので気をつけて下さいね(参考
常にone_to_oneであれば要らないかなと

投稿2017/06/18 06:00

chck

総合スコア184

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

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

ssk

2017/06/18 11:22

ありがとうございます。 なんとなく、userテーブルに意味のない数字があるのは気持ちが悪いので、テーブルを分けることにします。 質問してよかったです。スッキリしました。
ssk

2017/06/20 04:18

chck様 >>>常にone_to_oneであれば要らないかなと こちらはone_to_oneの場合はテーブルを分ける必要がないという認識で合っていますか?
chck

2017/06/20 15:41

そうですね、userテーブルに意味のない数字があるのが気持ち悪いように見えますが、決して意味のないわけではなく、userの持つsectionと考えると「userの1つの情報」という意味でuserテーブルにsectionがあっても全然不自然じゃないです また、user_sectionsのように他モデル同士の紐付け用を中間テーブルと呼んだりしますが、安直にこの中間テーブルを増やすと、単純に中間テーブル分レコードが増えてしまうのと、Rails上で扱う分にはあまり意識しませんが、SQLのクエリが1段複雑になってしまうというデメリットもあります!
ssk

2017/06/21 03:52

丁寧な返答ありがとうございます。 勉強になります。ありがとうございました><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問