7

RedBean ORMを使用している場合、データベース内のすべてのテーブルに「id」という名前の主キーを追加する必要がありますか?

私のデータベースには、2つまたは3つのフィールドの主キーのペア、または「id」以外の名前の主キーを持ついくつかのテーブルがあります(はい、名前を「id」に変更できますが、実際には反映されません実際、それらはIDではないため)

例:

table1 - 投稿を保存します:

  id           INTEGER      PRIMARY KEY AUTOINCREMENT,
  name         TEXT,
  title        TEXT,
  content      TEXT,

table2 - 投稿のメタデータを保存:

  post         INTEGER      DEFAULT 0,     # <- references "id" from "posts"
  name         TEXT,
  value        TEXT,
  PRIMARY KEY(name, post),
  CONSTRAINT posts_meta FOREIGN KEY(post)
    REFERENCES posts(id) ON DELETE CASCADE ON UPDATE RESTRICT

RedBean はこの種のデータベース構造で動作しますか?

4

2 に答える 2

11

残念ながら、現在のテーブル構造では、RedBean を使用できませんでした。すべてのテーブルには、自動インクリメントの主キーが必要です。既存の製品への統合がより困難になるため、わずかな欠点です。

この制約のために RedBean を使用できなかったいくつかのスレッドと、作者である Gabor De Mooij からの応答:

http://groups.google.com/group/redbeanorm/browse_thread/thread/6d5582275326744f?pli=1

http://groups.google.com/group/redbeanorm/browse_thread/thread/4fa7b29b453dcdb8

ただし、RedBean では、主キー フィールドに単に「id」という名前を付ける必要はありません。formatBeanID()次の例に示すように、条件付きでテーブル名の前に「id」を付けるメソッドを使用して、主キー列の名前を好みに合わせてフォーマットできます。例) テーブルusersの主キーはusers_idです。そのフォーマットを使用すると、必要に応じて ID 名を詳細に表示できます。

http://redbeanphp.com/community/wiki/index.php/Prefixes

この制限は、既存の製品への統合を実際に妨げているため、将来的には解除されることを願っています.

編集:代替 ORM として、Doctrine についてよく耳にしました: http://www.doctrine-project.org/。個人的には使用していませんが、PHP を扱う多くの人にとって標準のようです。

編集 2:データベースがセットアップされていない可能性のある既存のプロジェクトに RedBean を統合するための新しい方法に注意を向けさせてくれた Jason に感謝します。人々がまだこの問題を参照している場合に備えて、回答も更新したかったのです。Gabor は、RedBean に必要な適切な構造を持つようにビューを設定できるテーブルにマップするビューを作成することを提案しました。私はこれを個人的にテストしていませんが、一部のユーザーから肯定的なフィードバックを得ています. テーブルを変更するときに余分なオーバーヘッドとメンテナンスが追加されますが、これまでのところ、この問題に対する最良かつ最も完全な答えのようです。 http://www.redbeanphp.com/faq#beanformatter

于 2012-03-06T19:42:42.093 に答える