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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

2回答

2071閲覧

[Rails]ユニーク制約のマイグレーションと、id以外のカラムの外部キー設定

zyno

総合スコア41

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2019/12/05 11:48

編集2019/12/05 11:49

質問が2点あります。

①Railsで2つのカラムをユニーク制約をしたいです。

itemテーブル
id
number
name

といったテーブルがあり、idとnumberでユニーク制約をつけたいのですがどうmigrationしたらいいでしょうか?したいことは複合キー設定です。

②Railsでテーブルのid以外のカラム同士を関連づけたいです。

itemテーブル
id
number
name

friend_itemテーブル
id
number
name

それぞれのテーブルのidとnumberを関連づけたいと考えています。idの場合はreferences型で勝手に関連づけられますが、numberを関連づけたい場合にどうすればいいかがわからないのでご教授願えればと思います。

目的

目的としてはfriend_itemテーブルのidとnumberを用いて、itemテーブルのnameを検索したいと考えています。

参考

Webアプリ作成におけるDB設計について

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

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

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

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

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

guest

回答2

0

ベストアンサー

①railsのvalidationで行う方法と、DBへのindexでやる方法がありますが、複合キー設定したいということですから後者ですね
add_index :items,[:id,:number],unique: true
ただ、この場合は
add_index :items,:number,unique: true
でないとだめかな。idだけでユニークになりますから、同じnumberでも組み合わせるとユニークになってしまいます。

②1;多なのか多:多なのかどっちが主でどっちが従なのか、によって変わりますが
table名から想像すると

class Item has_many :friend_items, :foreign_key: :numbet,:primary_key: :number class FrientItem belongs_to :item, :foreign_key: :numbet,:primary_key: :number

と定義して下さい。
なおよく読んだら
「idとnumberを用いて、itemテーブルのnameを検索」
はなしですね。
numberを用いてItemを検索 ならありますが

class FrientItem

という名前からするとtebleの持ち方が違うかもしれないという気がしてきた
FrienItemがもつのは numberではなく item_id ではなかろうか

投稿2019/12/09 00:26

winterboum

総合スコア23284

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

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

0

まず、テーブル定義を FOREIGN KEY 外部キー を付けて修正してみては?

投稿2019/12/05 13:21

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問