관리자가 모듈을 구입하여 사용자에게 할당 할 수있는 작은 데이터베이스를 만들고 있습니다. 또한 관리자는 모듈에서 사용자를 할당 해제하고 (해당 라이센스를 폐기) 모듈에 다른 사용자를 재 할당 할 수 있습니다. 또한 이러한 변경 사항이 얼마나 자주 발생하는지 확인하기 위해 이러한 과제를 기록하고 싶습니다.
User_Licenses(user_license_id, user_id, module_id, date_from, date_to)
DATE_TO 활성 사용자를위한 빈 남아 :데이터베이스 디자인 및 SQL 문 속도
내 하나의 옵션은 유형의 하나 개의 테이블을하는 것입니다.
User_Licenses(user_license_id, user_id, module_id, active_user_log_id)
Active_User_Log(active_user_log_id, date_from, date_to)
:
SELECT user_id FROM User_Licenses
WHERE user_id = 1
AND module_id = 1
AND date_from <= TODAY
AND date_to = NIL
내 다른 옵션은 타입 2 개 테이블을 가지고있다 : 이것은 사용자가 해당 모듈에 대한 액세스 권한이 있는지 확인하기 위해 내가 확인해야 할 것이다 것을 의미한다 새 라이센스가 할당 될 때마다 로그 항목을 만들고 라이센스가 할당되지 않을 때마다 date_to 필드를 업데이트합니다.
지금은 할 그들은 사용자가 난 단지 알고있는 모듈에 대한 액세스 권한이 있는지 확인하기 위해 아직, 두 번째 옵션에 좀 더 프로그래밍 오버 헤드, 본질적으로 같은 것입니다 한 이해 :
SELECT user_id FROM User_Licenses
WHERE user_id = 1
AND module_id = 1
로그는 논리적으로 "일상 점검"과 분리되어 있습니다.
제가 알고 싶습니다. 가장 많이 사용되는 것은 무엇이며, 첫 번째 SQL 문은 두 번째 것보다 훨씬 느립니다.
이것은 웹 응용 프로그램을위한 것으로, 사용자 수가 100을 넘지 않을 가능성이 높으며 모듈에 대한 사용자 할당 변경이 최소화되어야합니다. 모듈에 대한 액세스 확인은 매일 이루어지며 사용자는 여러 모듈에 할당됩니다.
미리 도움을 주셔서 감사합니다.
활성 사용자는 두 경우 모두 내게 중요합니다. 처음 사용자에게 암시되었습니다. User_Log는 각 사용자가 다양한 모듈에 대한 라이센스를 모듈 단위로 갖기 때문에 거기에 있으며 (모듈 단위로) 한 달 동안 모듈을 필요로하지 않으면 그는 그 모듈을 "놓아"다시 구입할 수 있습니다 그 다음 달. 라이센스가 공유되지 않도록 로그가 필요합니다. 제안에 관해서는 속도가 중요한 요소가 아니기 때문에 필자는 엔티티 고유의 테이블 내용을 유지하기를 원하기 때문에 2 테이블 접근 방식이 더 좋다고 생각합니다. 조언 주셔서 감사 : D 조 –