我的网站是求职网站。有三种类型的用户:User
,Employee
或Admin
。关系数据库规范化问题
User
可以搜索和申请工作,Employee
可以发布职位信息,浏览器恢复,Admin
是管理网站。
这里是我定义的所有表格。
-- Users table, users = jobseekers, containing jobseekers info
DROP TABLE IF EXISTS users;
CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
email VARCHAR(80) NOT NULL,
pass CHAR(60) NOT NULL,
user_phone VARCHAR(11) NOT NULL,
user_address VARCHAR(250) NOT NULL,
active CHAR(32) NULL,
last_login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
last_login_ip VARCHAR(15) NOT NULL,
registration_time DATETIME NOT NULL,
registration_ip VARCHAR(15) NOT NULL,
PRIMARY KEY (user_id),
UNIQUE KEY (email),
INDEX login (email, pass)
) ENGINE = INNODB;
-- Employers table, containing employers info
DROP TABLE IF EXISTS employers;
CREATE TABLE employers (
employer_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
company_name VARCHAR(80) NOT NULL,
email VARCHAR(80) NOT NULL,
pass CHAR(40) NOT NULL,
employer_phone VARCHAR(11) NOT NULL,
employer_mobile VARCHAR(11),
employer_address VARCHAR(250) NOT NULL,
active CHAR(32) NULL,
last_login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
last_login_ip VARCHAR(15) NOT NULL,
registration_time DATETIME NOT NULL,
registration_ip VARCHAR(15) NOT NULL,
PRIMARY KEY (employer_id),
UNIQUE KEY (email),
INDEX login (email, pass)
) ENGINE = INNODB;
-- Administrators table, containing site administrators info
-- Note: move created_time after last_login_time, otherwise SQL error #1293
DROP TABLE IF EXISTS administrators;
CREATE TABLE administrators (
admin_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
email VARCHAR(80) NOT NULL,
pass CHAR(40) NOT NULL,
last_login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
last_login_ip VARCHAR(15) NOT NULL,
created_time DATETIME NOT NULL,
PRIMARY KEY (admin_id)
) ENGINE = INNODB;
-- CVs table, containing CV info
DROP TABLE IF EXISTS cvs;
CREATE TABLE cvs (
cv_id INT(10) UNSIGNED NOT NULL auto_increment,
cv_name VARCHAR(60) NOT NULL,
user_id INT UNSIGNED NOT NULL,
description VARCHAR(80),
PRIMARY KEY (cv_id)
) ENGINE = INNODB;
-- Jobs table, containing job information
-- Note: must use MYISAM to support Fulltext search
DROP TABLE IF EXISTS jobs;
CREATE TABLE jobs (
job_id INT(10) UNSIGNED NOT NULL auto_increment,
job_title VARCHAR(30) NOT NULL,
employer_id INT UNSIGNED NOT NULL,
company_name VARCHAR(80) NOT NULL,
description TEXT NOT NULL,
town VARCHAR(30) NOT NULL,
county VARCHAR(30) NOT NULL,
contact_name VARCHAR(40) NOT NULL,
contact_phone VARCHAR(11) NOT NULL,
contact_email VARCHAR(80) NOT NULL,
salary SMALLINT(5) UNSIGNED NOT NULL,
confirm TINYINT(1) UNSIGNED NOT NULL default 0,
posted_time TIMESTAMP NOT NULL,
deadline INT(10) UNSIGNED NOT NULL,
job_status SET('open', 'closed') NOT NULL,
employer_paid SET('yes', 'no') NOT NULL,
PRIMARY KEY (job_id),
FULLTEXT (job_title, description)
) ENGINE = MYISAM;
-- Jobs users applied
DROP TABLE IF EXISTS jobs_applied;
CREATE TABLE jobs_applied (
jobs_applied_id INT(10) UNSIGNED NOT NULL auto_increment,
user_id INT UNSIGNED NOT NULL,
cv_id INT(10) UNSIGNED NOT NULL,
cv_name VARCHAR(60) NOT NULL,
job_id INT(10) unsigned NOT NULL,
job_title VARCHAR(30) NOT NULL,
company_id INT(10) unsigned NOT NULL,
company_name VARCHAR(80) NOT NULL,
applied_time TIMESTAMP NOT NULL,
PRIMARY KEY (jobs_applied_id)
) ENGINE = INNODB;
-- Reports table, containing info to produce site reports
DROP TABLE IF EXISTS reports;
CREATE TABLE reports (
report_id INT(10) UNSIGNED NOT NULL auto_increment,
user_id INT UNSIGNED NOT NULL,
employer_id INT UNSIGNED NOT NULL,
job_id INT(10) unsigned NOT NULL,
job_title VARCHAR(30) NOT NULL,
job_posttime TIMESTAMP NOT NULL,
content VARCHAR(250) NOT NULL,
report_time INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (report_id)
) ENGINE = INNODB;
有人说我设计的表格正是我在关系数据库中不能做的,因为它们充满了重复。我不明白。任何人都请看看我的设计,并指出设计错误?
你的意思是除了我为所有用户定义的三个表之外,还应该有一个像users_employers_admins这样的新表?关于用户/授权管理,我可以找到任何示例源代码吗? Wordpress或其他PHP CMS有吗? – user3205002
我已经添加了一个解释一般故障的答案。 – user2864740