ORM にSequelを使用して、単純な Sinatra アプリを作成しています。ほとんどのデータは、次のようなユーザーとイベントを中心に展開されます。
- イベントには多くのユーザーを含めることができ、そのうちの 1 人が「所有者」です。
- ユーザーは多くのイベントを持つことができ、そのうちの 1 つまたは多くを "所有" します。
これが私のスキーマ/モデル定義の簡略化されたバージョンです:
class User < Sequel::Model(:users)
many_to_many :events
one_to_one :event
end
class Event < Sequel::Model(:events)
many_to_many :users
many_to_one :user
end
# provides a link between users and events
# e.g. event.users or user.events
# I am unsure how necessary this is :)
db.create_table :events_users do
primay_key :id
foreign_key :event_id, :events
foreign_key :user_id, :users
end
これにより、ユーザーをイベントに関連付けたり、ユーザーが関連付けられているイベントを取得したりできますが、イベントの「所有権」を表現するのに苦労しています。次の疑似コードが機能するようです。
my_user = User.all.first
owned_events = Event.where(user_id = my_user.user_id)
これは、次の 2 つの疑問につながります。
- 私が関連付けを使用している現在の方法は理にかなっていますか?
- Sequel のアソシエーション モデルに関して、イベントの所有権をどのように表現すればよいですか?