繁体   English   中英

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

[英]How do you design a database schema for a user profile page

尝试为作业站点设置用户个人资料页面。 我计划使用的数据库是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_detailexperience_detail中的user_id是将其引用给表user的外键。

我计划使用user_id作为FK,还有一些其他表格,例如技能,认证等。

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

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

使用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。 同上工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM