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 ;
任何幫助將非常感激。
感謝
謝謝@Anthony我在腦海中的事情是,如果有很多客人,會員登錄/更新他們的個人資料會不會很慢?當用戶登錄時,整個表格將被搜索? –
您始終可以運行定期維護腳本以刪除舊的非活動用戶。我們擁有超過2億行產品的表格。如果你達到這個數量的用戶,你可能還有其他問題,比如太多的錢:)你的表是相對較小的,並且有正確的索引,你不應該有任何性能問題。 –
2億是一個很大的數字。我懷疑他們是否會在未來兩年內打這麼多。我們當然可以爲此使用分區。我想我會採用你的方法。謝謝 –