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