2013-05-20 4 views
0

하나의 varchar 및 두 개의 BLOB 유형의 데이터가 있습니다. 나는 데이터 사이에 관계가 필요 없다. 예를 들어 어떤 식사에 감자가 필요한 식사인지 알 필요가 없습니다.동일한 테이블에있는 MySQL BLOB 데이터

나는 식사의 고기를 데이터베이스에서 가져 와서 편집하고 BLOB로 다시 저장합니다. 그런 다음 이진 텍스트 파일 (~ 100KB)을 즉시 만들어 이진 데이터라는 다른 열에 저장합니다.

내 질문은 두 가지로 분할 테이블이 의미가 있습니까? 하나의 BLOB를 하나의 테이블에두고 다른 BLOB를 다른 테이블에 배치하면 성능이 (이론적으로) 변경됩니다. 아니면 백업 문제를 제외하고 아무것도 변경하지 않습니까?

+-id--+-meal name (varchar)----+-materials (BLOB)------------+-binary data (BLOB)---+ 
| 1 | meatball    | (meat, potato, bread etc.) | (some binary files) | 
| 2 | omelette    | (potato, egg, etc.)   | (other binary files) | 
+-----+------------------------+-----------------------------+----------------------+ 
+0

db 스키마를 정규화해야합니다. –

답변

0

ORM을 사용하려면 분할 테이블 방식을 사용하는 것이 좋습니다. 그렇지 않으면 자료를 요청할 때 ORM이 일반적으로 사용 가능한 모든 필드를 가져옵니다 ... 따라서 크고 불필요한 "2 진"객체를 읽습니다.

다른 측면에서 ... 바이너리 결과를 제공하는 경우 더 나은 방법은 파일을 저장하고 직접 제공하는 것입니다.

0

특정 성능 향상보다 더 나은 디자인 선택입니다. 이 쿼리는 catch all "SELECT *"를 수행하지 않는다고 가정합니다. 검색어는 항상 특정 목적에 대해 관심있는 특정 항목을 타겟팅해야합니다.

현재 예상보다 커지는 특정 식사에 BLOB 유형을 예상하지 않으면 한 테이블에 보관하는 것이 적절한 선택입니다. 이것은 그들 사이에 일대일 관계가 있다고 가정합니다.

그러나 식사를 위해 더 많은 BLOB 개체가 필요할 수있는 경우 새 테이블과 상호 참조로 분할하는 것이 좋습니다. 때로는 미안하지만 안전보다 낫습니다.

관련 문제