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

4

2 回答 2

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";
于 2012-07-07T19:59:31.260 回答
0

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

于 2012-07-07T20:00:40.023 回答