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;

データベースにこれら2つのテーブルがあります。これらの2つのテーブルを組み合わせるか、そのままにしておくとよいでしょう。

私はデータベースに不慣れで、mysql用にいくつかのテーブルを作成するだけです。

4

2 に答える 2

1

正規化をアドバイスする場合は(常に!)、2つのテーブルのままにしておくことをお勧めしますが、アクセス許可テーブルの性質を、現在のように1-1ではなく1対多に変更します。

従業員テーブルの従業員ごとに1つの行があり、次にアクセス許可テーブルのアクセス許可ごとに1つの行が必要です。

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

これは、システムに権限タイプを追加する必要がある場合に非常に有利です。スキーマをリファクタリングする必要はありません。本当にやりたい場合は、「permissions」という3番目のテーブルを作成し、多対多を作成します。ここで、employee_permissionsテーブルは2つの外部キーです。1つはemployee_id用、もう1つは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

あなたのテーブルが表すように、最初のテーブルは従業員の基本情報を含み、2番目のテーブルにはその従業員の許可権が含まれています... 2つのテーブルの間に関係があるはずです...従業員のIDを2番目foreign relationshipに使用できますforeign keytable...データベースのプロパティを維持します.....したがって、2つのテーブルを使用することをお勧めしますforeign relationship......

于 2012-07-07T20:00:40.023 に答える