2016-11-09 44 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 | 
| ...  | ... | 

問題出在這裏:如果新成員被添加到第一個表中,這應該反映在第二個表中。如果一個成員不再是一個成員,同樣的事情也必須發生。
我在互聯網上搜索瞭解決方案,但只能找到表格被刪除和重新創建的地方,但這不是真正可行的,因爲第二個表格中的數據非常重要。我們不希望已經支付費用的成員必須再次支付費用。

我想知道:

  1. 這甚至可能與使用SQLite的?
  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 | 

或者你可以保持一個支付表,申報從該表中成員外鍵約束(在這樣的任何元組付費在會員中有一個元組),然後假設如果一個會員沒有付費,那麼它就沒有付費。 否則使用該字段的值。

相關問題