2013-07-24 3 views
0

번역 할 필요가있는 "코딩 된"데이터와 사용자의 "원시"데이터를 직접 저장하는 가장 좋은 방법은 조금 고심하고 있습니다. . 여기에 환자의 혈압을 측정 하였다 나타내는 선택 목록의 구체적인 예는 다음과 같습니다VARCHAR 대 INT, "번역"서버 측과 클라이언트 측의 데이터 저장

<select id="location"> 
<option value="1">Office</option> 
<option value="2">Home</option> 
<option value="3">Hospital</option> 
<option value="4">Work</option> 
<option value="5">Other</option> 
</select> 

과거가, 나는 ", VARCHAR 저장 변수를 만들어 단지 모두 소문자"사무실 "로 저장 한 것 가정 ","병원 ","직장 ","기타 ". 그러나 지난 한 달 동안 나는 더 우아한 "접근법이 정수"코드 "(위의 예제 에서처럼)로 저장 한 다음 테이블에서 읽었을 때이를 변환 할 것이라고 생각 해왔다. 서버 측 번역 : 당신

그래서
$location=$row['location']; 
    if ($location == '1') {$location = "Office";} 
    else if ($location == '2') {$location = "Home";} 
    else if ($location == '3') {$location = "Hospital";} 
    else if ($location == '4') {$location = "Work";} 
    else if ($location == '5') {$location = "Other";} 

내 멍청한 놈 질문은 약간 철학적이다 -

  1. 을 수행하면 항상 "원시"VARCHAR 데이터로/가끔 데이터를 저장, 또는 어떻게하면 "코드" 에서 정수/부울 등? 둘 중 하나를 수행 할 기준이 있습니까?

  2. 데이터를 "코딩"하는 경우 서버 측 또는 클라이언트 측에서 "디코딩"합니까?

귀하의 의견에 미리 감사드립니다.

답변

0

답변은 magic numbers입니다. 코드에서 if ($foo == 4)을 사용하지 않아야합니다. 간결하게 말하자면, WTF는 "4"를 의미합니까?

모두,이 목적을 위해 상수를 사용하는 경우 :

define('HOSPITAL', 4); 

if ($foo == HOSPITAL) ... 

더 이상 기본 의미 값과 직접 접촉하지 않기 때문에, 절반 나쁘지 않다. 애플리케이션을 디버그해야한다면 데이터베이스를 포함하여 어디에서나 값을 볼 수 있습니다. 여기서는 ENUM이 유용하지만 PHP는이를 지원하지 않습니다. 데이터베이스가 그래도. 이것은 당신 제공

CREATE TABLE foos (
    foo ENUM('hospital', 'office', ...) 
); 

define('HOSPITAL', 'hospital'); 

if ($foo == HOSPITAL) ... 

: 데이터베이스에

  • 유형의 안전과 감소를 저장
  • 유형의 안전과 최소한의보다 효율적인 처리 타협 따라서 PHP에서 데이터베이스와 상수 ENUMs을 사용하는 것입니다 PHP에서
  • 코드 작성 및 디버깅시 완전한 명확성
+0

oooooooooooooo ooooooh ... 빛은 단지로부터 떨어져서 갔다! !! 나는 하나의 정수를 저장하는 것이 더 효율적이라고 생각했지만, 첫 번째 코멘트를 기반으로 생각하지는 않습니다. 다행히도 열거 형으로 변경할 수있는 페이지에는 6 개의 "마법 번호"만 있습니다. 고맙습니다! 고맙습니다! 고맙습니다! "마술 숫자는 나쁘다" "마술 숫자는 나쁘다" "마술 숫자는 나쁘다" "마술 숫자는 나쁘다" "마술 숫자는 나쁘다"- :-) – TimSPQR

관련 문제