2016-08-15 17 views
1

我正在爲一個組織創建一個Web門戶,我對這部分有點困惑。捐贈圖表應該是什麼樣的?

他們將接受他們的註冊會員和客人的捐款。我正在考慮創建一個僅用於註冊成員和沒有客人等的用戶表,因爲用戶表將包含唯一的「電子郵件」列,我不希望它爲空。

對於捐款,我可以爲用戶表添加user_id外鍵。

我想要做的是我應該在捐款表中添加「姓名」和「移動」列,這樣如果是客人,我們只需要獲取他的姓名和電話號碼並將其放入捐款表中。你認爲這是正確的方式嗎?

對於剛剛演示的目的,我向您展示表:

用戶表

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `mobile` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `status` tinyint(1) NOT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `users_email_unique` (`email`), 
    UNIQUE KEY `users_mobile_unique` (`mobile`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 

捐款表

CREATE TABLE IF NOT EXISTS `donations` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int(10) unsigned DEFAULT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `mobile` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `status` tinyint(1) NOT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `users_user_id_foreign` (`user_id`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 

任何幫助將非常感激。

感謝

回答

1

有很多方法來解決數據問題 - 一些比別人做得更好。如果您已經瞭解了一些細節,我將不會有單獨的用戶表。相反,有一個REGISTERED_USER列或沿着這些線表示一個「完整用戶」與部分。然後,一切都保持相對簡單,用戶有一個選項,以後成爲一個完整的用戶,我認爲你想要捐贈...... :)

+0

謝謝@Anthony我在腦海中的事情是,如果有很多客人,會員登錄/更新他們的個人資料會不會很慢?當用戶登錄時,整個表格將被搜索? –

+0

您始終可以運行定期維護腳本以刪除舊的非活動用戶。我們擁有超過2億行產品的表格。如果你達到這個數量的用戶,你可能還有其他問題,比如太多的錢:)你的表是相對較小的,並且有正確的索引,你不應該有任何性能問題。 –

+0

2億是一個很大的數字。我懷疑他們是否會在未來兩年內打這麼多。我們當然可以爲此使用分區。我想我會採用你的方法。謝謝 –