2

저는 현재 강사와 학생의 세부 사항을 저장하는 프로젝트를 진행하고 있습니다. 하나의 테이블 User 또는 두 테이블 LecturerStudent을 사용해야하는지 잘 모르겠습니다.강사 및 학생을 위해 MySql에서 1 ~ 2 개의 테이블을 만들어야합니까?

강사로 로그인하면 프로젝트에 대한 그룹 관리 페이지로 학생에게 부여되지 않는 그룹 페이지에 특별한 권한이 있습니다. User tbl에 열이있을 것입니다 status 어디 등록에 학생이나 강사가 될 수있는 페이지와 강사 코드를 입력하십시오. PHP로 mySql을 사용하고 있습니다.

요약하면 학생과 강사 모두에게 1 User 테이블을 사용해야하나요 아니면 StudentLecturer 테이블을 별도로 사용해야합니까?

추가 정보 : 1 개 코스에는 많은 강사와 학생이있을 수 있지만 1 명의 학생에게는 1 개 코스가 있으며 강사는 많은 코스가 있습니다.

+0

이것은 데이터를 기반으로합니다. 모든 사용자가 동일한 마스터 데이터를 가지고 있고 그 유형 만 변경하는 경우 플래그 필드가있는 1 개의 테이블을 사용하십시오. – vaso123

+2

예, 데이터에 매우 의존적입니다. 강사가 다른 강사 반에서 학생이 될 수 있습니까? 그렇다면 일반적으로 나쁜 생각 인 두 개의 다른 테이블로 이동하면 한 사람이 두 엔티티로 저장됩니다. 나는 단 하나의 테이블에 기대고 있지만 모델의 세부 사항과 현실에 달려 있습니다. @ ctrahey가 "역할"이라는 아이디어를 단일 사용자 테이블에 추가하는 제안은 문제에 대한 매우 전통적이며 잘 검증 된 솔루션입니다. –

+0

Student 테이블에있는 정보 중 일부는 학생이 CourseID를 외국으로 가지고 있기 때문에 학생과 강사를 별도의 테이블에 둘 필요가 있다고 가정합니다. 학생은 강사가 많고 강사는 많은 학생이 있으며 데이터베이스의 링커 테이블을 사용하여이 둘을 연결합니다. 나는 둘 다 하나의 User 테이블에 둘 수 있다고 가정했다. – drapu

답변

7

큰 질문입니다!

이 시스템을 확장하려는 경우, 좀 더 "표준화 된"모델링을 제안하는 것이 좋습니다. 강사와 학생이 동일한 엔티티 (사람/사용자)임을 인식하여 이미 올바른 방향으로 가고 있습니다. 트릭은 "역할"을 모델링 한 다음 사용자 역할도 모델화해야한다는 것입니다. 모델의이 작은 부분에 대해 총 3 개의 테이블을 만듭니다.

USERS    USER_ROLES   ROLES 
+------------+  +----------+   +--------+ 
| id   | <--> | user_id |  /-->| id  | 
| login_name |  | role_id | <--/ | name | 
| etc  |  +----------+   +--------+ 
+------------+ 

users 
====== 
id 
login_name 
etc 

roles 
======= 
id 
name 

user_roles 
=========== 
user_id 
role_id 
since 

샘플 데이터

USERS 
+----+------------+ 
| id | login_name | 
+----+------------+ 
| 1 | Chris  | 
+----+------------+ 
| 2 | Cherri  | 
+----+------------+ 


ROLES 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | Lecturer | 
+----+------------+ 
| 2 | Student | 
+----+------------+ 

USER_ROLES 
+---------+---------+ 
| user_id | role_id | 
+---------+---------+ 
| 1 |  1 | <-- Chris is a Lecturer 
+---------+---------+ 
| 2 |  2 | <-- Cherri is a student 
+---------+---------+ 
| 2 |  1 | <-- Cherri is also a lecturer 
+---------+---------+ 
+1

@minboost 이것은 복잡하지 않습니다. 이것은 매우 모호한 매우 유연한 솔루션입니다. – binnyb

+0

이 솔루션을 사용하려면 3 개의 테이블이 필요하며 역할을 관리하려면 프론트 엔드가 필요합니다. 단일 열 솔루션 (비트 단위로 취급 할 경우 여러 역할을 허용)에 대한 장점이 없습니다.이 경우 중요한 것은 역할에 대한 사용 권한을 관리하기위한 추가 테이블이있는 경우이지만이 경우 역할에 레이블을 추가하는 두 개의 추가 테이블을 만드는 것입니다. – minboost

+1

@minboost 그건 분명히 대조적이지만, 나는 내구력있는 소프트웨어 패턴을지지하고 싶다. 이렇게 많은 미래 방문자가이 포스트를 찾아 낼 SO에, 그들에는 경미하게 다른 필요가 있을지도 모른다. 우수한 데이터 모델링은 소프트웨어 패키지에서 가장 내구성있는 가치 요소 중 하나입니다. 투자 가치가 있다고 생각합니다. –

-2

는 학생이나 강사의 여부를 나타내는 필드가 하나의 테이블을 사용합니다. 그것은 간단한 정수 열 이름 "role"일 수 있습니다. 여기서 role = 0은 학생을 의미하고 role은 1은 강사를 의미합니다.

이것은 구현이 빠르고 간단하며 요구 사항을 충족합니다.