2011-01-04 1 views
2

내 MySQL 데이터베이스에 새 열을 만들지 말아야할지 모르겠다.새 DB 열을 만들어야 하나 없습니까?

calculated_data (ID, 날짜, the_value, 상태)

상태가 부울입니다 :

나는 테이블을 가지고있다.

calculated_data FROM the_filtered_value AS

SELECT IF (상태 the_value, 0 FALSE IS)

: the_filtered_value

는 I 이렇게 쉽게 얻을 수

는 I라는 별도의 값을 필요

calculated_data 테이블은 수백만 개의 항목을 가지고 있으며 차트와 데이터 테이블 (php 사용)에 과 the_filtered_value을 표시합니다.


IT는 calculated_data 테이블에 새 열 the_filtered_value을 만들거나 단지 SELECT IF 쿼리를 사용하는 것이 더 있습니까?

성능이
  • 더 나은 DB 설계
  • 더 쉽게
  • 유지하기 위해 ...

감사합니다 : "더 나은"내가 볼에서

너의 도움으로!

+0

말하기 어렵습니다.새 열을 추가하는 경우 느리게 끝나고 한 번만 수행하여 업데이트를 유지해야합니다 (다른 일상적인 절차가 느려질 수 있음). 즉석에서 계산하면 쿼리 속도가 느려질 수 있습니다. 솔직히 최선의 방법은 열이없는 타이밍 테스트를 수행하고 열을 추가 한 다음 더 많은 타이밍 및 성능 테스트를 수행하는 것입니다. – FrustratedWithFormsDesigner

답변

3

열을 추가하지 마십시오. 대신 원본 데이터 테이블을 기반으로 VIEW를 만들고 뷰에 표현식을 기반으로 한 the_filtered_value라는 "가상"계산 열을 추가하십시오.

이렇게하면 파생 된 데이터를 저장하지 않고 해당 식의 "논리"를 코드의 다른 위치에 복사하지 않고도 필터링 된 값에 쉽게 액세스 할 수 있습니다. 또한 대부분의 경우 테이블처럼보기에서 직접 작업 할 수 있습니다.

CREATE VIEW calculated_data_ex (id, date, the_value, status, the_filtered_value) 
    AS SELECT id, date, the_value, status, IF(status IS FALSE, 0, the_value) 
     FROM calculated_data 
+0

미래에 테이블에 여분의 열을 추가하려면 뷰를 다시 만들어야합니까? – benjisail

+0

예, 그렇습니다. – Dave

+0

보기에서 해당 열을 보려면 (항상 그렇지는 않음) 추가 열을 포함하도록보기 정의를 다시 만들어야합니다. –

0

추가 필드를 추가하면 앱이 복잡해 지지만 쿼리가 더 쉬워집니다 (특히 다른 테이블에 조인 된 경우).

필자는 개인적으로 가능한 한 데이터베이스에서 가능한 한 분리 된 데이터를 유지하려고 노력하며 응용 프로그램에서이 문제를 처리합니다. MVC 패턴을 사용하면이 작업을 더 쉽게 수행 할 수 있습니다.

0

이것은 MS SQL에서 작동하지만 MySQL이 구문을 지원하는지 잘 모르겠습니다.

declare @deleteme table (value int, flag bit) 
insert @deleteme 
Values 
(1,'False') 
,(2,'true') 

Select *, (flag*value) AS the_filtered_value from @deleteme 
관련 문제