指定された長さのインデックスを持つ MySQL の VARBINARY フィールドが必要だったので、schema.rb から structure.sql に切り替える必要がありました。これは schema.rb では処理されませんが、structure.sql では処理されます。
残念ながら、私たちは今、より大きな問題に直面しています。structure.sql ファイルにはCREATE TABLE
、ステートメントがアルファベット順に含まれています。テーブルには外部キー制約があります。structure.sql ファイルには、これらの主要な制約が含まれていますが、ファイルをさらに下るまで作成されないテーブルを参照しています。
例えば
CREATE TABLE attachments (
id INT NOT NULL auto_increment PRIMARY KEY,
user_id INT,
/* ... snip ... */
CONSTRAINT attachments_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE
) ENGINE=InnoDB CHARSET=utf8;
/* ... snip ... */
CREATE TABLE users (
id INT NOT NULL auto_increment PRIMARY KEY,
/* ... snip ... */
) ENGINE=InnoDB CHARSET=utf8;
これに対する回避策はありますか? このような一般的な DB スキーマの設計原則は根本的に壊れているように思えますが、これが事実だとは信じられません。Rails 3.2.12 を使用しています。