2011-03-28 7 views
0

게시 유형별 사이트 (토론, 질문 및 설명)가 다른 유형의 게시물을 작성하고 있습니다.게시 유형 데이터베이스 - INT 또는 VARCHAR

성능 및 가독성을 위해 선호되는 스토리지 방법은 무엇이라고 생각합니까? 예를 들어

: 내 첫 번째 아이디어는 INT로 저장하는 것이었다 있도록

Id | PostType | PostTitle 
1  2   Example title 

또는

Id | PostType | PostTitle 
1  Question  Example title 

성능, 내 주요 목표입니다. 그러나 게시물 유형 이름 (매번 필요함)을 얻으려면 다소 불만족스러운 if/else 문을 실행해야합니다.

if/else 비즈니스를 피하고 읽을 수 있지만 VARCHAR 유형을 선호하지만 확실하지 않습니다.

+1

ENUM을 사용하면 정수 http://dev.mysql.com/doc/refman/5.0/en/enum으로 데이터베이스에 저장됩니다.html – ahmedsafan86

+0

멋진, 감사합니다 아메드 - 나는 그것을 들여다 볼 것입니다 – Booski

+0

답변 해 주셔서 감사합니다! – Booski

답변

2

거의 항상 PostType의 텍스트 버전이 필요한 경우 추가 테이블 및 추가 코드를 피하기 위해 VARCHAR 유형을 사용해야합니다.

+0

이것은 내가 생각하고 있었던 것이었다, 나는 정직하게 단지 약간의 안도를 필요로했다. 답변 주셔서 감사합니다 – Booski

+0

중복 데이터가 없습니까? 나는 별도의 테이블을 유지하고 포스트 타입을 유지하여 데이터베이스가 향후 포스트 타입을 위해 쉽게 업데이트 될 수 있다고 믿는다. 가독성의 경우, OP는 뷰를 대신 사용할 수 있습니다. – reggie

+0

어디서 열거가 열리는 지 알고 싶습니다 .. – shashuec

1

현대의 db 시스템에서는 개별 필드와 같은 작은 규모로 성능에 대해 걱정할 필요가별로 없습니다. 그러나 varchar로 만들려는 경우 varchar 길이를 적절한 크기 (예 : varchar (10))로 제한하십시오. 질문 유형을 보유하기 위해 조회 테이블을 만들 수도 있습니다. 이것은 불필요하고 더 느릴 수도 있지만.

내 선택은 두 번째 예제에서와 같이 유형을 입력란에 배치하는 것입니다.

+0

쿨, 고마워요 John – Booski

2

질문, 답변 및 댓글과 같은 게시 유형 정보가있는 "유형"테이블을 갖기를 권합니다. 기본 테이블에서 기본 키를 사용하여 호출해야합니다. 첫 번째 예는 정수 값입니다. 이렇게하면 테이블에 더 많은 게시물 유형을 추가해야하는 경우 데이터베이스를 관리하는 데 도움이됩니다.

가독성의 경우 위의 2 개 테이블을 결합하는보기를 만들 수 있으며 원하는 경우 언제든지 읽을 수 있습니다.

+0

당신이 레지를 무슨 뜻인지 알지만 늘 성장하는 DB에서 또 다른 테이블을 만드는 것은 내가하고 싶은 것이 아닙니다. 답변을 주셔서 감사합니다! – Booski

+0

Np. 그냥 fyi, varchar 값은 5 바이트를 사용하는 반면 tinyint는 1 바이트를 사용하여 mysql 테이블에 값을 저장합니다. :) – reggie

1

많은 기업들이 int에 int를 사용합니다. 나는 그들이 if 문을 더 짧게하고 select case 문을 더 쉽게 만드는 데 도움이된다고 생각한다. 그것이 내가 Varchar를 매우 선호한다고 말하고 있습니다. varchar를 사용하면 과도한 문서화 또는 새로운 코드 작성자가 어느 번호가 어느 번호와 일치하는지 모르는 것에 대해 걱정할 필요가 없습니다.

if(PostType == 1){do code} 


if(PostType == "Question"){do code} 

이 중 하나를 이해하기 쉽습니까? 상단에는 몇 줄의 주석이 필요합니다. 큰 거래처럼 들리지는 않지만 코드를 많이 사용하면 더할 수 있습니다.

+0

답변 주셔서 감사합니다, 이것은 내가 생각했던 것입니다, 그것은 단지 항상 안심을 얻는 것이 좋습니다! – Booski

1

중복 데이터 양을 줄이기 위해 정수를 사용합니다. 당신은 배열을 사용하거나 예컨대, 각 ID에 대한 올바른 문자열을 얻기 위해 매핑 할 수 있습니다 :

cats = {1: "Question", 2: "Comment", 3: "Discussion"} 
cat = cats[post.postType] 

를 나중에 긴 이름을 갖고 싶어 경우 문제가 실행될 수 있습니다 존에 의해 제안대로 VARCHAR 필드를 제한합니다.

+0

나는 배열을 사용하는 것에 대해서 생각조차하지 않았다. 생각을위한 음식. 답변 해주셔서 감사합니다! – Booski

1

Enum을 사용하십시오. 다음에 오타가 없는지 확인하십시오. 문자열을 사용하여 열거 형을 비교할 수 있으며 INT로 저장됩니다.

관련 문제