안녕하세요.! DB설계후 웹 개발 프로젝트를 진행하려 합니다.
교수와 학생을 유저등급으로 구분하여 유저테이블에 같이 설계했었습니다.
user_num : {type : DataType.INTEGER , primaryKey : true , allowNull: false},
user_id: { type : DataTypes.STRING, allowNull: false, unique: true},
user_password: { type : DataTypes.STRING, allowNull : false },
user_grade: { type : DataTypes.INTEGER, defaultValue : "1" },
유저등급으로만 구분했었습니다.
설계하다보니 교수테이블을 참조해야하는 테이블이 생겨서 학생과 교수를 분리했습니다.
분리하고나니 로그인테이블을 어떻게 해야하나 생각하다가 교수테이블과 학생테이블을 UNION 하여 VIEW 를 생성해서
VIEW를 참조하여 로그인을 제공하려했으나 데이터 20만건일때 응답속도가 1초 가량 나와서 사용할 수 없을거 같습니다.
보통 유저등급이 존재하는 테이블은 로그인 테이블을 어떻게 설계하나요..
1. 테이블 분리에 대해
유저 테이블에서 등급으로 구별이 가능한데?
분리하신 이유가 교수만 참조하는 경우가 생겨서 인가요?
분리에 대한 충분한 이유는 아닌데요.
교수와 학생의 속성이 다르다거나
분리하는 것이 관리상 도움이 된다거나, 성능상 좋다거나 하는
충분한 이유가 있어야 할 것입니다.
2. UNION 에 대해
UNION 은 잘 사용하지 않는 명령입니다. 대부분의 경우 UNION ALL 로 해결됩니다.
그런데도 불구하고 UNION ALL 을 써야 할 곳에 UNION 을 사용하는 경우가 많은데요.
UNION 을 잘못 사용하면 성능저하가 발생될 수 있습니다.
1. 네 맞습니다. 교수와 유저의 속성이 같았습니다. 그렇기때문에 유저등급이라는 속성을 통해 교수와 유저를 구분하려 했었습니다. 홈페이지의 기능을 추가하게 됨으로써 교수와 학생의 속성이 달라졌습니다. 그래서 교수와 학생을 분리하려고 하는데 로그인에 사용될 아이디와 패스워드를 어떻게 해야할지 모르곘습니다. 로그인을 위한 테이블을 하나 생성하는 것이 과연 올바른 방법인지 잘모르겠습니다.
2. 제가 사용한것이 잘못된 방법인듯 합니다. DB의 사용법에 대해나 배웠지 제대로된 DB를 배워본적이 없어 생각해낸것이 분리된 테이블을 합치고( UNION ) 데이터를 중복으로 저장하지 않기위해 VIEW 를 생각했습니다. 물론 결과적으로 성능저하가 엄청나게 일어났습니다. 제가 한 방법이 잘못된 방법인듯합니다. 정말 두서없이 쓴글에 정성스러운 답변 정말 감사합니다.!!