Mysql表成一个表

时间:2012-07-07 19:52:26

标签: mysql mysql5

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编写一些表。

2 个答案:

答案 0 :(得分:1)

如果我们建议规范化(总是!),那么我建议你将它们保留为两个表,但是将权限表的性质改为一对多而不是1-1,就好像它似乎是现在

employee表中的每个雇员应该有一行,然后权限表中有一行每个权限

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

当您需要向系统添加权限类型时,这非常有用;您不需要重构您的架构。如果你真的想要一路走下去,请创建一个名为" permissions"的第三个表,然后创建一个多对多表,其中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";

答案 1 :(得分:0)

正如你的表所代表的那样,第一个表是conatin员工的基本信息,第二个表包含该员工的权限......我认为,两个表之间应该有关系foreign relationship ...你可以在第二个表中使用员工ID作为foreign key ...它将维护数据库属性.....所以,我建议你使用两个表foreign relationship .....