【问题标题】:What should be the Schema for Donation table?捐赠表的模式应该是什么?
【发布时间】:2016-12-21 10:42:41
【问题描述】:

我正在为一个组织创建一个门户网站,对此我有些困惑。

他们将收到注册会员和客人的捐款。我正在考虑创建一个仅用于注册会员且没有客人等的用户表,因为用户表将包含唯一的“电子邮件”列,我不希望它为空。

对于捐赠,我可以为 users 表添加 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 ;

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: mysql sql database schema


    【解决方案1】:

    有很多方法可以解决数据问题 - 有些方法比其他方法更好。如果您已经获得一些详细信息,我不会有单独的用户表。而是有一个 REGISTERED_USER 列或沿着这些行来表示“完整用户”而不是部分用户。然后一切都保持相对简单,并且用户可以选择稍后成为完整用户,我假设您想要捐款...... :)

    【讨论】:

    • 感谢@Anthony 我当时的想法是,如果有很多客人,会员登录/更新他们的个人资料会不会很慢?因为,当用户登录时,会搜索整个表?
    • 您始终可以运行定期维护脚本来删除旧的非活动用户。我们在生产中拥有超过 2 亿行的表。如果你达到了这个数量的用户,你可能还有其他问题,比如太多的钱:) 你的表相对较小,并且有正确的索引,你应该不会有任何性能问题。
    • 2 亿是一个很大的数字。我怀疑他们是否会在未来两年内达到如此高的水平。我们当然可以为此目的使用分区。我想我会采用你的方法。谢谢
    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2013-03-29
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多