Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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_Database Design_Relational Database - Fatal编程技术网

Mysql 如何为用户配置文件页面设计数据库架构

Mysql 如何为用户配置文件页面设计数据库架构,mysql,database-design,relational-database,Mysql,Database Design,Relational Database,正在尝试为作业网站设置用户配置文件页。我计划使用的数据库是MySQL数据库 通过研究一些数据库设计,我提出了这个模式 首先是用户管理表 CREATE TABLE `user` ( `user_id` int(11) NOT NULL, `firstname` varchar(32) NOT NULL, `lastname` varchar(32) NOT NULL, `email` varchar(96) NOT NULL, `mobile_number` varchar(3

正在尝试为作业网站设置用户配置文件页。我计划使用的数据库是MySQL数据库

通过研究一些数据库设计,我提出了这个模式

首先是用户管理表

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `email` varchar(96) NOT NULL,
  `mobile_number` varchar(32) NOT NULL,
  `password` varchar(40) NOT NULL,
  `salt` varchar(9) NOT NULL,
  `address_id` int(11) NOT NULL DEFAULT '0',
  `ip` varchar(40) NOT NULL,
  `status` tinyint(1) NOT NULL,
  `approved` tinyint(1) NOT NULL,
  `registration_date` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `user_address` (
  `user_id` int(11) NOT NULL,
  `city` varchar(128) NOT NULL
  `work_city` varchar(128) NOT NULL,
  `postal_code` varchar(10) NOT NULL,
  `country_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `user_description` (
  `user_id` int(11) NOT NULL,
  `description` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后是教育表和工作经验

CREATE TABLE `education_detail` (
  `user_id` int(11) NOT NULL,
  `certificate_degree_name` varchar(255) DEFAULT NULL,
  `major` varchar(255) DEFAULT NULL,
  `institute_university_name` varchar(255) DEFAULT NULL,
  `start_date` date NOT NULL DEFAULT '0000-00-00',
  `completion_date` date NOT NULL DEFAULT '0000-00-00'
)

CREATE TABLE `experience_detail` (
  `user_id` int(11) NOT NULL,
  `is_current_job` int(2) DEFAULT NULL,
  `start_date` date NOT NULL DEFAULT '0000-00-00',
  `end_date` date NOT NULL DEFAULT '0000-00-00',
  `job_title` varchar(255) DEFAULT NULL,
  `company_name` varchar(255) DEFAULT NULL,
  `job_location_city` varchar(255) DEFAULT NULL,
  `job_location_state` varchar(255) DEFAULT NULL,
  `job_location_country` varchar(255) DEFAULT NULL,
  `job_description` varchar(255) DEFAULT NULL
)
请注意,表user_address、user_description、education_detail和experience_detail中的user_id是一个外键,将其引用到表用户

还有一些类似于表的技能、认证等,我计划将用户id用作FK

我的问题是,这个数据库设计足够好吗?你能告诉我应该做些什么来使设计更好吗

记住,并不是所有人都有工作经验,有些人可能是新生

使用InnoDB,而不是MyISAM。(有许多问答解释了“为什么”。)

NULL
或空字符串对于缺少的
说明
是完全可以接受的。你还有什么理由不喜欢这样吗?(同时,InnoDB在处理可选的大字符串方面更高效。)

每个表都应该有一个
主键
;你好像没有。第一个表可能需要
user\u id
作为主键。阅读有关自动增量的信息

说明
一样,为什么
地址
在一个单独的表中

我可以为国家/地区名称/代码/身份证提供以下建议:

country_code CHAR(2) CHARACTER SET ascii

教育是1:许多来自用户,因此
user\u id
不能成为PK。作业也是如此。

为什么描述在自己的表中?我可以看到,一个用户可以有多个地址、学位和以前的工作,所以把这些放在额外的表中是有意义的(很多)。但对于描述,我认为这是没有必要的(尽管严格来说并没有错)。我宁愿考虑有单独的电子邮件和电话号码表,因为它们也可以是每个用户的一个。@ StykyBoT,我选择了一个不同的表来描述,因为那里有懒惰的用户,我相信没有多少人愿意描述他们自己。我试图在我的数据库中没有空列。也许我错了,这就是我寻求帮助的原因。嗨,我当时正在涂鸦并建立一个数据库,看看它应该是什么样子。我的本地MySQL乱七八糟,引擎设置为MyISAM。我不打算使用MyISAM,而是使用InnoDB。谢谢你的指点。关于描述,如前所述,我不想要一个空单元格,但正如你所说,这是好的,所以我计划没有一个不同的表来描述(关于我)。在用户拥有多个邮政地址之前,在不同的表中考虑地址几乎没有任何意义,谢谢您的指出。教育中的用户id应该是FK而不是PK。@DakshB-如果一个用户可以有多个地址,那么地址表需要分开,并在其中包含一个
用户id
。这样,关系将是1:many(1个用户对多个地址)。