2013-10-15 4 views
0

숫자가 인 데이터베이스가 여러 개 있다고 가정 해 보겠습니다. 필드 USER_TYPE, user_status, user_currency드롭 다운 목록 항목의 설명 저장 방법을 구성하는 방법

지금

내가, 내 웹 사이트 내 페이지에 다른 정보를 함께이 정보를 표시해야 내가 위의 정보 중 일부는

를 인쇄 할 10 페이지가 있다고 가정 할

방법 1 다음 내가 임시로

SELECT ... 
     user_status 
     ... 
    FROM users 
     WHERE user_id = 5 

같은 것을 통과 내가 쿼리를 쓸 때 내가 할 후반 언어, 난 멋지 V3

를 사용하여 다음 페이지 템플릿 안에 내가

{section ...} 
    ... 

    {if $users[0].user_status == 1} 
     New User 
    {elseif $users[0].user_status == 2} 
     Application Accepted 
    {elseif $users[0].user_status == 3} 
     Payment received 
    {/if} 

    ... 
{/section} 

때문에 동일한 코드 같은 것을 기본적으로 10 개의 서로 다른 페이지로 이동하고 내가 뭔가를 변경하거나, 통화 등 새로운 상태를 추가 할 때 내가 가지고 각 페이지로 이동 방법 2

그래서 난에 시작이 걸리는 경우

나는이 방법은 매우 신뢰할 수없는 생각 문 시간에 추가하기 이렇게하면 사용자 상태가있는 다른 테이블을 만들 수 있습니다. tbl_user_statuseds

user_status_id status_name 
    1    New User  
    2    Application Accepted 
    3    Payment received 
    ... 

다음 각 페이지에 대한 주요 질의에 나는이

SELECT ... 
     tbl_user_statuseds.status_name 
     ... 
    FROM users 
     LEFT JOIN tbl_user_statuseds ON tbl_user_statuseds.user_status_id = users.user_status 
      WHERE user_id = 5 

같이 할 페이지에 난 그냥 {$users[0].status_name} 사용 전 새 상태를 추가 할 경우이 각 페이지에 편집을합니다. 모든 그러나 두 번째 방법

일단 데이터베이스 테이블 상태에서 새로운 라인을 추가한다 수행해야합니다 난 그냥 숫자 ID 설명을 tbl_user_statuseds를 포함하는 데이터베이스에 현재 약 10 테이블, tbl_currency_names 등 tbl_user_sex

METHOD 3 이 ID를 저장하기 위해 테이블을 한 번 사용하는 것이 좋은 방법일까요? 예.

tbl_id_labels

id id_type id_number id_label 
    421  2  1  New User  
    422  2  2  Application Accepted 
    423  2  3  Payment received 
    424  8  1  USD 
    425  8  2  EURO 
    426  5  1  Male 
    427  5  2  Female 
    ... 

그때 단지 할 내가 ID_NUMBER 예에 기초하여 표를 제외한 남아 가입 방법 2와 동일

SELECT ... 
     tbl_id_labels.status_name 
     ... 
    FROM users 
     LEFT JOIN tbl_id_labels ON tbl_id_labels.id_number = users.user_status AND tbl_id_labels.id_type = 2 
      WHERE user_id = 5 

이 방식으로 나는 내 시스템에있는 숫자 ID에 대한 모든 레이블이있는 하나의 테이블 만 가질 수 있습니다. 미래에 추가해야 할 일이 너무 많지 않다면, 모든 문제는 id_typeid_number, id은 호환성을위한 것입니다.

세 번째 방법으로 문제가 발생 했습니까? 아니면 더 나은 방법을 조언 할 수 있습니까?

답변

0

방법 1은 분명히 지원하기 불편, 그래서 내가 제안하지 마십시오

방법이 좋은 옵션, 단지 LEFT 훨씬 더 INNER

방법 3이 매우 좋지 않다, 가입 사용하지 않는 것입니다 옵션 때문에 성능이 우수하므로 2 번째 제안합니다

또한 왜 데이터베이스에 상수 데이터를 저장해야합니까? 간단한 스위치/배열을 사용하여 ID에 대한 제목을 출력하는 10 개의 PHP 함수를 만드시겠습니까? -이게 가장 빠른 접근이 될거야

+0

나는 id_type과 id_number 열에 대한 색인을 만들면 세 번째 방법이 지연 될 것이라고 생각하지 않는다. 나는 테이블의 총 크기가 언제나 몇 백 개가 넘는 것을 볼 수 없다. 저는 PHP 접근법에서 필드 이름을 저장하는 것을 좋아합니다. 예를 들어 줄 수 있습니까? –

+0

두 번째 옵션은 세 번째보다 빠르게 작동합니다.이 점에 대해 성능에 대해 썼습니다. 예를 들어 다음과 같습니다 :'function getStatusForId ($ id) {switch ...}'와'echo getStatusForId ($ users [0] .user_status)' –

+0

실제로는 조금 느린 경우에도 방법 3을 선호합니다.이 방법을 사용하면 최종 사용자 (클라이언트)가 상태 이름을 바꾸거나 새로운 상태를 추가 할 수있는 관리 인터페이스에서 페이지를 만들 수 있습니다. 나는 그가 물론 새로운 상태를 삭제 편집하면 프로그램을 중단하지만, 그 프로그램이 모든 물류 (사용자 또는 시스템 프로세스)가 PHP 테이블이 아닌 데이터베이스 테이블에 정의 될 수있는 방법으로 생성 될 수 있다고 믿는다. –