4

データベースからスキーマを作成している間、テーブル間の多対多の関係は作成されません。

これは主要な問題ですか?

多対多の関係が存在することをテーブル構造から検出し、スキーマクラスにそれぞれのコードを自動的に作成することは可能ですか?

4

2 に答える 2

5

それは確かにやや根本的な問題です。many_to_manyは「関係の架け橋」であり、「関係」ではありません。ドキュメントには、「ブリッジとリレーションシップの違いは、ブリッジを使用して検索でテーブルを結合することはできず、代わりにそのコンポーネントのリレーションシップを使用する必要があることです」と説明されています。

一方、これは、実際の関係が正しく検出された場合、多対多の関係を自動的に追加するのが簡単であることを意味します。まず、2つ以上のhas_many関係を持つテーブルを検索します。次に、そのような関係のペアごとに、多対多の関係ブリッジを作成します。(もちろん、DBIx :: Classがこれを自分で行うことを望むかもしれません。)

于 2011-04-02T01:27:10.167 に答える
2

この種のコードを開発する際の問題は、複数の参照を含む多くのテーブルが多対多のテーブルではなく、他の理由で複数の参照を持っていることです。たとえば、架空のアプリのスキーマを作成します。このスキーマでは、そうでない場合でも、何かが多対多のテーブルと見なされる可能性があります。

create table category (
    id primary key,
    ...
);

create table sub_category (
    id primary key,
    category references category(id),
    ...
);

/* EDIT:
    This is the table that could be regarded as many_to_many
    by an automated system */
create table product (
    id primary key,
    category references category(id),
    sub_category references sub_category(id),
    ...
);

特に速度を考慮する場合、Webサイトのデータベースで複数のテーブル結合を行うことなく、使いやすさのためにこの方法で何かを構築できます。コードの一部が「これは多対多ではない」という状況を明確に言うのは難しいでしょうが、開発者はそれを簡単に理解し、チェックサムの下に多対多の行を追加できるはずです。

DBIX :: Classスキーマは、特にMySQL以外のデータベースで自動番号付けを使用する場合など、良い出発点であり、それ以上のものではないと思います。「この行より上では変更しないでください」というものより上で変更する必要があることがよくあります(もちろん、many_to_manyは明らかにそのチェックサムより下に行くことができますが。

于 2011-04-06T16:47:38.497 に答える