2012-07-07 3 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'의 약자입니까? –

+0

은 기본 키가 둘 다 동일합니까? 예 당신이 그들을 – nischayn22

+0

병합 할 수 있습니다 경우에 그들은 시스템에 로그온하고 (우리의 이익을 위해) 의미 이름에 모호한 이름을 모두 변경할 수 서로 다른 권한을 – user1509201

답변

1

우리는 (항상!) 정상화를 향해 조언하는 경우에, 나는 당신이 두 개의 테이블로 떠나 제안 있지만 반드시 권한 테이블의 성격을 변경 일대 대신에 1-1의 그것은에 표시처럼 당장있어.

직원 테이블에는 각 직원에 대해 하나의 행이 있어야하고 권한 테이블에는 권한 당 하나의 행 이 있어야합니다.

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

권한 유형을 시스템에 추가해야하는 경우 매우 유용합니다. 당신은 당신의 스키마를 리팩토링 할 필요가 없을 것입니다. 실제로 모든 방법으로 이동하려면 "사용 권한"이라는 세 번째 테이블을 만든 다음 many_to_missions 테이블이 employee_id와 permission_id의 두 외래 키일 경우 many-to-many를 사용하십시오.

주어진 권한이있는 직원을 선택하려면 테이블이 대표로, 첫 번째 테이블은 직원과 두 번째의 기본 정보 conatin 그 직원의 허가 권리를 포함

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

에 대한 테이블을 그대로 두십시오. 따라서 테이블을 그대로두고이 데이터에 동일한 데이터를 입력하면됩니다. 1, add_j_mgt, '1' – user1509201

+0

음, 좀. 두 번째 테이블의 구조는 (여기서 보여준 DDL로) 변경 될 것이고, 그렇다면 1 행의 PER 권한이있을 것입니다. 이 관계의 활성화 비트를 필요로하지 않기 때문에 –

+0

나는 그것을 조금 수정은 ... 행 단순히 존재는 권한 (권한을 제거하기 위해 행을 삭제) –

0

... 제 생각에는, 두 관계가 있어야한다 테이블 foreign relationship ... 당신은 두 번째 테이블에 foreign key로 직원의 ID를 사용할 수 있습니다 ... 그것은 데이터베이스 속성을 ..... 유지합니다 그럼,과 두 테이블을 사용하는 것이 좋습니다 것이 545,...... 당신이이 테이블을 사용합니다 어떤

+0

MyISAM은 이러한 제약 조건을 지원하지 않는다는 점에 유의해야한다. InnoDB를 사용하여 MySQL이 관계를 강화하도록해야한다. 이미 외래 키 employer_id_fk이 –

+0

는 emp_u_p 테이블에 내 키가 – user1509201

+0

@ctrahey 잘 나는 내가 가정 각 테이블 – user1509201

관련 문제