2016-11-09 5 views
0

私は、約100から200のメンバーを持つ小規模な組織用のデータベースを構築しています。それらのメンバーはメンバーになるために少額の料金を支払わなければなりません。SQLite:テーブルを他のテーブルのベースとして使用する

私はメンバーのすべての詳細が表示されているテーブルを作成しました:

------------------------------------------ 
| First name | Last Name | Address | ... 
------------------------------------------ 
| John  | Smith  | Street 1 | ... 
| Jane  | Smith  | Street 2 | ... 
| ...  | ...  | ...  | ... 

は今、私はメンバーの名前が表示されていると、彼らはそこに料金を支払っている場合は、テーブルを作成したい:

---------------------- 
| Name  | Paid? | 
---------------------- 
| John Smith | yes | 
| Jane Smith | no | 
| ...  | ... | 

ここで問題が発生します。新しいメンバーが最初のテーブルに追加された場合は、2番目のテーブルに反映する必要があります。メンバーがもはやメンバーでない場合、同じことが起こらなければならない。
私はインターネットでソリューションを検索しましたが、テーブルを削除して再作成したものだけを見つけることができましたが、2番目のテーブルのデータが本当に重要であるため、これは実際に実行可能ではありません。すでに手数料を払っているメンバーがもう一度手数料を支払う必要はありません。

私が知りたい:

  1. は、SQLiteの使用でこれでも可能ですか?
  2. 解決策がある場合は、2番目のテーブルのデータを適切な場所に保つことが保証されていますか?


P.S:この質問を書き込んだ後、私は、一時テーブルを作成する第二のテーブルのデータをコピーし、オリジナルを再増殖し、その後、一時テーブルからデータをコピーバックと考えます。これはSQLiteStudioのようなツールでは非常に邪悪で非常に難しいようです。より良い方法がありますか?

答えて

1

データの操作方法は、保存方法よりも多く考える必要があります。

これは一般的な正規化の問題です。支払われたものと同じくらいたくさんのメンバーがいます。両方とも同じ主キーを持ちます。したがって、両方のテーブルを結合する必要があります。

テーブルメンバーに支払う項目を追加し、デフォルトで「いいえ」にします。例えば

create table members(
    firstname text, 
    lastname text, 
    paid bool default false, 
    -- any other fields 
    primary key (firstname, lastname) 

)。

、あなたが挿入した場合:

insert into members(firstname, lastname) values ('john', 'smith'); 

をあなたが得る:

| firstname | lastname | paid | 
|-----------+----------+-------| 
| john  | smith | false | 

また、あなたがメンバーにそのテーブルから外部キー制約(そうで任意のタプルを宣言し、支払ったテーブルを維持することができます払い戻しはメンバーにタプルがあることを前提としています)、会員が支払われていなければ、支払っていないと仮定します。 それ以外の場合は、フィールドの値を使用します。

関連する問題