如何为用户配置文件页设计数据库模式

eyh26e7m  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(302)

正在尝试为作业网站设置用户配置文件页。我计划使用的数据库是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\u address、user\u description、education\u detail和experience\u detail中的user\u id是将其引用到表user的外键。
还有一些类似于表的技能、证书等,我计划使用user\u id作为fk。
我的问题是,这个数据库设计足够好吗?你能告诉我应该做些什么使设计更好吗?
记住,并不是所有人都会有工作经验,有些可能是新人。

vxqlmq5t

vxqlmq5t1#

使用innodb,而不是myisam(有许多问答可以解释“为什么”。) NULL 或者一个空字符串对于一个丢失的 description . 你还有什么理由不喜欢这样吗(同时,innodb在处理可选的大字符串方面效率更高。)
每一张table都应该有一张table PRIMARY KEY ; 你好像没有。第一张table可能需要 user_id 作为pk。了解 AUTO_INCREMENT .
与…一样 description ,为什么是 address 在另一张table上?
我可以推荐这个国家的名称/代码/身份证吗:

country_code CHAR(2) CHARACTER SET ascii

教育是1:很多来自用户,所以 user_id 不能是pk。工作也是如此。

相关问题