2012-07-07 89 views
0
CREATE TABLE emp_u (
     id  INT NOT NULL AUTO_INCREMENT, 
     emailAddress VARCHAR(100) NOT NULL, 
     username  VARCHAR(30) NOT NULL, 
     passwd   VARCHAR(40) NOT NULL, 
     title   CHAR(4) NOT NULL, 
     firstName  VARCHAR(50) NOT NULL, 
     surname   VARCHAR(50) NOT NULL, 
     PRIMARY KEY (id), 
     UNIQUE KEY(emailAddress), 
     UNIQUE KEY(username), 
     KEY idx_fullname (firstName, surname) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE emp_u_p (
    employer_id_fk INT NOT NULL DEFAULT 0, 
    s_mgt   TINYINT(1) NOT NULL DEFAULT 0, 
    add_j_mgt  TINYINT(1) NOT NULL DEFAULT 0, 
    edit_j_mgt  TINYINT(1) NOT NULL DEFAULT 0, 
    del_j_mgt  TINYINT(1) NOT NULL DEFAULT 0, 
    j_mgt   TINYINT(1) NOT NULL default 0, 
    cp_mgt TINYINT(1) NOT NULL default 0, 
    ph_mgt  TINYINT(1) NOT NULL default 0, 
    cb_mgt  TINYINT(1) NOT NULL default 0, 
    search_mgt  TINYINT(1) NOT NULL default 0, 
    PRIMARY KEY (employer_id_fk) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我在数据库中有这两个表。将这两张表结合在一起,或者保持原样,会更好。将Mysql表合并到一个表中

我是新来的数据库,只为我的MySQL写一些表。

+0

你会使用这些表格来做什么? 'emp'是'employee'的简称吗? – 2012-07-07 19:53:55

+0

是两个主键相同吗?如果是的话,你可以合并他们 – nischayn22 2012-07-07 19:55:33

+0

他们将被用于雇主登录到系统,并为他们设置不同的权限 – user1509201 2012-07-07 19:55:37

回答

1

如果我们建议您进行标准化(总是!),那么我建议您将它们保留为两个表格,但将权限表的性质更改为一对多而非1-1,就像它看起来一样现在。

员工表中每个员工应该有一行,然后在权限表中每个权限一行

CREATE TABLE emp_u_p (
emp_u_id INT NOT NULL DEFAULT 0, 
permission_name varchar 
); 

当您需要将权限类型添加到您的系统时,这非常有利;你将不需要重构你的模式。如果你想真正走完所有的路,做第三张名为“权限”的表,然后有一个多对多的表,你的employee_permissions表只有两个外键:一个表示employee_id,另一个表示permission_id

与给定权限选择员工:

SELECT emp_u.* 
FROM emp_u JOIN emp_u_p 
    ON emp_u.id = emp_u_p.emp_u_id 
    AND permission_name = "add_j_mgt"; 
+0

persact表,所以离开表,它只是输入相同的数据到这些表达例如, 1,add_j_mgt,'1' – user1509201 2012-07-07 20:01:56

+0

呃,挺好。你的第二个表的结构会改变(我在这里展示的DDL),然后是的,它会有1行PER权限。 – 2012-07-07 20:03:09

+0

我修改了一下,因为你不需要为这个关系启用位...只是行的存在表明权限已启用(删除行以删除权限) – 2012-07-07 20:04:57

0

当你的表代表,第一台conatin员工和第二个基本信息包含了员工的同意权......我想,应该有两个关系表格为foreign relationship ...你可以在第二个表中使用雇员的ID作为foreign key ...它将保持数据库属性.....所以,我会建议你使用两个表与foreign relationship ......

+0

应该指出,MyISAM不支持这些约束(您的代码可以处理它)。你应该使用InnoDB来让MySQL为你执行关系。 – 2012-07-07 20:02:17

+0

我已经有一个外键employer_id_fk是我的关键emp_u_p表 – user1509201 2012-07-07 20:03:08

+0

@ctrahey多数民众赞成是正确的,因为我使用MyISAM我不能在每个表之间输入约束 – user1509201 2012-07-07 20:04:40