[前][次][番号順一覧][スレッド一覧]

rails:1708

From: hoti <hoti_jp@y...>
Date: Thu, 12 Oct 2006 14:46:43 +0900 (JST)
Subject: [rails:1708] Re: リレーションシップの外部参照 id が使えない

manakay さん、めちゃめちゃ、理解できました。
ありがとうございました!


で、周辺をぐぐっていると、下のような議論を発見。

・参照整合性制約は……つけたい派
   http://capsctrl.que.jp/kdmsnr/diary/20060210.html#p01

・参照整合性制約は……つけたくない派
   http://d.hatena.ne.jp/babie/20060213/p3
   http://shugo.net/jit/20060216.html#p01

私としては、migration + sqlite3 で行きたいので、manakayさんが一般的といわれている"参照整合
性制約……つけたくない派"で始めてみます。

   http://techno.hippy.jp/rorwiki/?UsingMigrations(migrationではALTER TABLEする)
   http://donrails.araki.net/notes/id/5220(sqlite3ではALTER TABLEでCONSTRAINTできない)

みなさん、ありがとうございました。

以上。
-----------------------
manakayさん wrote:
> ところで、FKを使うのと、下のように"普通の列"とするのと基本的に同じ、という認識でよいので> ょうか?

Railsでリレーションシップを設定できるのは、ActiveRecordのオブジェクト間のリンク宣言だけです
(つまり、has_one,
has_many, habtmなど)。DDLでのFK指定は、Railsにとっては意味はありません。もちろん、データベ
ースが参照先のキーをチェックしてくれるのでDDLでFK指定したほうがいいとは思いますが。
前のメールで私がFKと書いたのは、Railsが認識する参照キー、「モデル名_id」のことであって、デ
ータベースの外部キー制約のことではありません。報知さんが読まれた「FKなしでidのみでOK」とい
う記事でいうFKは、このデータベースの外部キー制約のことを指しているのだと思います。つまりDDL
でFK指定をしなくとも、オブジェクトレベルでリレーションシップを設定することができて、それは
規約に従えば「モデル名_id」でOKだということを言っているのだと思います。
Railsでリレーションシップを設定するのならば、下記のやり方でOKです。というか、下記のやり方
が一般的だと思います。


> ーーーーー
>   class User < ActiveRecord::Base
>     # I reference an account.
>     belongs_to :account
>   end
>
>   class Account < ActiveRecord::Base
>     # One user references me.
>     has_one :user
>   end
>
> The tables for these classes could look something like:
>
>   CREATE TABLE users (
>     id int(11) NOT NULL auto_increment,
>     account_id int(11) default NULL,
>     name varchar default NULL,
>     PRIMARY KEY  (id)
>   )
>
>   CREATE TABLE accounts (
>     id int(11) NOT NULL auto_increment,
>     name varchar default NULL,
>     PRIMARY KEY  (id)

--------------------------------------
[10th Anniversary] special auction campaign now!
http://pr.mail.yahoo.co.jp/auction/

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]