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

时间:2018-12-26 12:02:48

标签: 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(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是引用表用户的外键。

我打算使用user_id作为FK,还有一些表,例如技能,认证等。

我的问题是,此数据库设计是否足够好?您能建议我做些什么以使设计更好吗?

请记住,并非所有人都有工作经验,有些人可能更新鲜。

1 个答案:

答案 0 :(得分:1)

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

NULL或空字符串对于丢失的description来说是完全可以的。您还有其他理由不喜欢这种说法吗? (同时,InnoDB在处理可选的大字符串方面效率更高。)

每个表都应有一个PRIMARY KEY;您似乎没有。第一个表可能需要user_id作为PK。了解有关AUTO_INCREMENT的信息。

description一样,为什么address在单独的表中?

我可以为国家名称/代码/ id推荐这个吗?

country_code CHAR(2) CHARACTER SET ascii

教育程度为1:1,来自用户很多,因此user_id不能作为PK。同上工作。