2009-08-25 4 views
0

간단한 포럼 시스템과 같이 게시물을 표시하는 응용 프로그램을 작성하고 있습니다. 게시물은 사용자가 게시물을 제출할 때 긴급한 것으로 표시 될 수 있지만 중재자는 "긴급한"상태를 승인해야합니다. 게시물은 긴급한 것으로 승인되지 않았더라도 계속 표시되지만, 중재자가 긴급한 상태를 승인하여 게시물이 특별한 대우를받을 때까지 정상적인 게시물로 보입니다.최고의 mysql 접근?

1) 게시물 테이블에 두 개의 플래그가 있습니다

가 나는이 두 가지 접근 방법을 고려했다. 하나는 사용자가 긴급 상태를 요청했으며 두 번째는 관리자가 긴급 상태를 승인했음을 나타냅니다. 이 모두 인 경우에만 게시물이 긴급한 것으로 표시됩니다.

2) 두 개의 테이블이 있습니다. 보류중인 모든 긴급 승인을 보유한 보류중인 테이블을 요청합니다. 관리자가 긴급 상태를 승인하면 보류중인 테이블에서 요청을 삭제하고 게시물 테이블을 업데이트하여 긴급 필드가 해당 게시물에 적용되도록합니다.

두 방법 중 어느 쪽이 다른 쪽보다 낫다는 것이 확실하지 않습니다.

첫 번째 해결 방법은 걱정할 표가 하나 뿐이지 만 더 많은 필드가있는 것입니다. 게시물 테이블이 앱에서 가장 쿼리 된 테이블이라는 점을 감안하면 쿼리가 느리게 실행되는지 여부를 확실히 알 수 없습니다.

두 번째 해결 방법은 게시물 테이블을 가볍게 유지하지만 다른 테이블을 처리합니다 (어렵지는 않음).

저는 두 번째 해결책에 기대고 있지만, 헤이스를 분석하고 내 삶을 복잡하게 만드는 것이 아닌지 궁금합니다. 조언?

답변

1

확실히 1). 추가 테이블은 일을 망칠뿐입니다. 하나의 추가 상태 필드는 0 = 정상, 1 = urgent_requested, 2 = urgent_approved 등의 값으로 충분합니다.

승인이 필요한 쿼리의 경우 status = 1로 쿼리 할 수 ​​있으며 상태 desc로 주문하면 자연스럽게 긴급 메시지가 표시됩니다.

+0

정말 좋은 생각입니다. posts 테이블에는 이미 "긴급"플래그가 저장되어 있지만이 방법을 사용하면 보류중인 요청을 동일한 필드로 줄일 수 있습니다. 감사. – nedlud

+0

글쎄, 내가 정확히 제안한 바가있다 : D는 내가 조금 잘못 이해 한 것처럼 보인다. 내 솔루션에는 2 번째 테이블에 그가 의미하는 바가 포함되어있다. 0 = normla 등으로 썼다. –

+0

: 어떤 a 정신 분열증 닉은 IT 관련 사이트에서 NedLud입니다! =) – Zed

1

당신은 포스트 상태와 당신이 상태를 참조하는 columnt이됩니다 게시물 테이블에 테이블을 가질 수

..

이 apporach 여러 가지 장점을 가지고 마음 :)에서 오는 또 다른 해결 방법이 있습니다 - 앞으로 더 많은 상태를 원활하게 추가 할 수있는 것처럼 또는 상태를 변경하는 방법 (워크 플로)에 대한 규칙을 보유한 다른 테이블을 가질 수도 있습니다.

+0

나는이 아이디어가 마음에 들지만, 지금까지는 대답 1에서 좋아할 것 같다. – nedlud

1

두 번째 방법은 디자인 측면에서 가장 깨끗하며 결국 디스크 공간을 덜 차지하게됩니다. 첫 번째 접근법은 "순수"하지만 유지 관리 및 코딩의 관점에서 보면 더 간단합니다. 그러므로 나는이 접근법을 사용합니다.

또한 디자인을 떠 올리기 전에 다른 사람이 코드를 작성하고 작성하는 것을 보아주는 ​​것이 좋습니다. :) 내가 본 수많은 엉망인 업 프로젝트를 말할 수는 없다. 디자인에 대한 한 시간의 생각으로 모든 사람들이 많은 시간을 절약 할 수 있었을 것이다 ...

1

옵션 1은 최고야. 당신이해야 할 일은 두 필드로 색인을 만드는 것뿐입니다. 옵션 2가 너무 복잡해 짐

나는 이와 같은 것들을 위해서 mysql 쿼리를 가지고있다.내가 기억하는 바로 그 순간에 글을 올리거나 정확한 구문을 찾는다.

+0

여기 있습니다. 이렇게하면 flag = 1 인 모든 행이 첫 번째 위치에있게되고 모든 것이 "datetime"또는 사용하는 필드에 따라 정렬됩니다. ORDER BY CASE 플래그가 0 인 경우 THEN 0 ELSE 1 END, datetime –

+0

err, typo : 0을 1로 바꾸거나 그 반대로 바꾸기 –

+0

오, 멋지다. 고마워요 :) – nedlud

관련 문제