2016-08-15 47 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亿是一个很大的数字。我怀疑他们是否会在未来两年内打这么多。我们当然可以为此使用分区。我想我会采用你的方法。谢谢 –