【发布时间】:2019-05-24 16:53:58
【问题描述】:
尝试为工作网站设置用户个人资料页面。我打算使用的数据库是 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。
我计划将 user_id 用作 FK。
我的问题,这个数据库设计是否足够好?你能建议我做些什么来使设计更好吗?
请记住,并非所有人都有工作经验,有些人可能是新人。
【问题讨论】:
-
为什么描述在自己的表中?我可以看到,一个用户可以有多个地址、学位和以前的工作,所以把它放在额外的表中是有意义的(很多)。但是对于描述,我认为没有必要(尽管并非完全错误)。我宁愿考虑为电子邮件和电话号码设置单独的表格,因为每个用户也可能不止一个表格。
-
@stickybit,我选择使用不同的表格进行描述,因为那里有懒惰的用户,我相信没有多少人愿意描述自己。我试图在我的数据库中没有空列。也许我错了,这就是我寻求帮助的原因。
标签: mysql database-design relational-database