Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 捐赠表的架构应该是什么?_Mysql_Sql_Database_Schema - Fatal编程技术网

Mysql 捐赠表的架构应该是什么?

Mysql 捐赠表的架构应该是什么?,mysql,sql,database,schema,Mysql,Sql,Database,Schema,我正在为一个组织创建一个web门户,对此我有点困惑 他们将接受注册会员和客人的捐赠。我正在考虑创建一个用户表,该表只用于注册成员,不用于来宾等,因为用户表将包含唯一的“email”列,我不希望它为空 对于捐赠,我可以为users表添加user_id外键 我想做的是,我应该在捐款表中添加“姓名”和“手机”列,这样,如果是客人,我们应该只获取他的姓名和电话号码,然后将其放入捐款表中。你认为这是正确的方法吗 出于演示目的,我将向您展示以下表格: 用户表 CREATE TABLE IF NOT EXIS

我正在为一个组织创建一个web门户,对此我有点困惑

他们将接受注册会员和客人的捐赠。我正在考虑创建一个用户表,该表只用于注册成员,不用于来宾等,因为用户表将包含唯一的“email”列,我不希望它为空

对于捐赠,我可以为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 ;
任何帮助都将不胜感激


谢谢

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

谢谢@Anthony我的想法是,如果有很多客人,会员登录/更新他们的个人资料不是很慢吗?例如,当用户登录时,将搜索整个表?您始终可以运行定期维护脚本来删除旧的非活动用户。我们有超过2亿行的生产表。如果用户数量达到这个数字,您可能会遇到其他问题,比如太多的钱:)您的表相对较小,并且有正确的索引,您应该不会有任何性能问题。2亿是一个很大的数字。我怀疑他们在未来两年内是否会受到如此大的打击。我们当然可以为此目的使用分区。我想我会同意你的方法。谢谢