0

リレーショナル (sqlite) データベースで継承を模倣するいくつかのテーブルを実装しようとしています。私の目標は、一般的なフィールドを持つ 1 つのマスター テーブルと、特殊なフィールドを持ついくつかの子テーブルを持つことです。マスター テーブル内のすべてのレコードは、特定のテーブルの 1 つだけに対応するものを 1 つだけ持ちます。私が欲しいものは次のようになります:

マスターテーブル:

id (PK) #Your average web2py unique auto-incrementing int field
#Some general fields

子テーブル:

id (PK, FK referencing the PK of the master table)
#Some specialized fields

子テーブルごとにデフォルトの「id」PKを持っていても、私には役に立ちません。必要なのは、子テーブルの PK として機能するマスター テーブルへの FK 参照だけです。これは、子テーブルの PK が一意になることを意味しますが、ギャップが含まれます。これは、子テーブルがマスター テーブルの一部のレコードのみを参照するためです。

これを行う (子テーブルに通常の「id」PK を与えない) ことは、Web2py のやり方に反するという印象を受けます。だから私の質問は次のとおりです:

  1. これはBad Idea™ですか? もしそうなら、なぜですか?
  2. これをどのように実装しますか?Web2py は、PK として自動インクリメント int を持たないテーブルを処理できますか?

コードを書くときに正しいスタイルと練習を適用することは、私にとって非常に重要です。私は代替アプローチを受け入れます。

ご協力ありがとうございました。

4

1 に答える 1

1

キー付きテーブルに関する書籍のセクションを参照してください。これが特に web2py で使用するためのデータベースである場合は、標準の web2py アプローチに固執することをお勧めします。

db.define_table('master', ...)

db.define_table('child', Field('master', db.master))
于 2012-07-02T22:23:59.610 に答える