如果採取的是物件模型的方式來設計程式,那麼繼承關係可能就會在程式設計中出現,然而關聯式資料庫的關聯模型與物件模型並不匹配,例如若模型有以下的繼承關係:
# user.rb
class User < ActiveRecord::Base
end
# nobody.rb
class Nobody < User
end
# sombody.rb
class Somebody < User
end
為了映射物件模型與關聯模型,來看看繼承關係映射至關聯式資料庫的方式之一:Single-Table Inheritance。這種方式使用一個表格儲存同一個繼承階層的所有類別,並使用額外的欄位來表示所記錄的是哪一個子類別的資料,具體來說,對於繼承User類別的Nobody及Somebody,可以設計以下的表格來儲存資料:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.integer :age
t.string :nobody_prop
t.string :somebody_prop
t.string :type # 必須有個type欄位
t.timestamps
end
end
end
def change
create_table :users do |t|
t.string :name
t.integer :age
t.string :nobody_prop
t.string :somebody_prop
t.string :type # 必須有個type欄位
t.timestamps
end
end
end