2009-12-02 4 views
2

나는 음식 데이터베이스에서 일하고 있으며, 모든 음식에는 지방질 (에너지, 비타민 등)의 목록이 있습니다.모든 데이터베이스 열에 대해 하나의 ID, 수행 방법?

단백질, 지방, 탄수화물, 비타민, 요소 등의 50 개의 다른 열로 구성됩니다. .. (많이 있습니다.)
극단적 인 경우 나중에 열 수가 증가 할 수 있지만 최대 값은 80이되지 않습니다.
각 열은 다른 테이블의 전체 목록 중 하나의 참고 문헌을 개별적으로 참조해야합니다 (값이 신뢰할 만한지 확인해야 함).

가 (다른 테이블을 가리 킵니다)

을 하나의 특정 예외 참조를 위해 번호, NULL 발, 또는 0을 포함해야 ID를 고려 I했습니다 몇 가지 솔루션을하지만,하지만 그들은 매우 다른 eachothers이며, 나는 db를 가진 신참이다. 그래서 나는 최선의 해결책에 대해 모른다.

단백질로 값 1을 고려, 개

등등 탄수화물, 같은 (I 희망) 생각이 개 대안은 최고 :

(1) 하나 VARCHAR (? ~ 255) 열을 생성, 이 같은 모든 50 개 IDS, 그래서 뭔가 :

column energy    (7.00) 
column carbohydrates  (89.95) 
column fats    (63.12) 
column value_bil_ids  (165862,14861,816486) ## as a varchar 
etc... 

이 경우, 나는 배열에 ","로 분할하고, ID를 확인하지만, 난 여전히 praticity 코딩 걱정 수 있습니다 ... 너무 많은 열을 절약 할 수는 있지만 나는 확장 성을 위해서 얼마나 소작술이 될 수 있는지 모른다.

column energy     (7.00) 
column energy_bibl_id   (165862) 
column carbohydrates   (89.95) 
column carbohydrates_bibl_id (14861) 
column fats     (63.12) 
column fats_bibl_id   (816486) 
etc... 

weightful 것 같다 : 는 원칙적으로, 나는 쿼리 최적화를위한 보통이 옵션을 (! I 희망)

가 가

(2) 간단히 때문에, 모든 값을 추가 id 컬럼을 사용하여 생각 열의 수는 분명하지만 그 다음에는 특히 값 열과 ID의 관계가 명확합니다.

(3)

다음은 최상의 솔루션이 있다면 그렇게

table values 
energy 
carbohydrates 
fats 
value_id --> point to table values_and_bibliographies val_bib_id 


table values_and_bibliographies 
val_bib_id 
energy_id  --> point to table bibliographies biblio_id 
carbohydrates_id --> point to table bibliographies biblio_id 
fats_id   --> point to table bibliographies biblio_id 


table bibliographies 
biblio_id 
biblio_name 
biblio_year 

는 나도 몰라, 가치, 참고 문헌 뒤에 관계형 테이블을 만들고, 누군가가 가지고하는 데 도움이됩니다 경우에 나는 감사한다 그것에 빛!

+1

MySQL에는 테이블 당 4,096 열의 하드 제한이 있지만 열의 데이터 유형 (http://dev.mysql.com/)에 따라 달라 지므로 그 수는 더 적을 수 있습니다. doc/refman/5.0/ko/column-count-limit.html –

답변

5

:)하시기 바랍니다 정교한. 당신이하는 일은 광기이며 머리가 풀어지게 할 것입니다. 관계형 데이터베이스라고하며 열을 추가하지 않고도 원하는대로 할 수 있습니다. 행을 추가 할 수 있도록 구조화하려고합니다.

실제 이름을 사용하십시오. 그러면 스키마를 채울 수 있습니다.

편집 좋은 편집. # 3은 정상적인 디자인에 가깝습니다. 그러나 서지 목록에서 참고 문헌이하는 일에 대해 아직도 명확하지 않습니다. 나는 이것이 당신이 원하는 것이라고 생각합니다.당신은 서지와 연결된 음식과 그 구성 요소를 가질 수 있습니다. 서지는 조리법과 같다고 가정합니까?

FOODS 
id name 
1 broccoli 
2 chicken 

COMPONENTS 
id name 
1 carbs 
2 fat 
3 energy 

BIBLIOGRAPHIES 
id name   year 
1 chicken soup  1995 


FOOD_COMPONENTS links foods to their components 
id food_id component_id bib_id value 
1 1   1   1  25 grams 
2 1   2   1  13 onces 

데이터를 얻으려면 조인을 사용하십시오.

SELECT * from FOOD_COMPONENTS fc 
    INNER JOIN COMPONENTS c on fc.component_id = c.id 
    INNER JOIN FOODS f on fc.foods_id = f.id 
    INNER JOIN BIBLIOGRAPHIES b on fc.bib_id = b.id 
WHERE 
    b.name = 'Chicken Soup' 
+1

저와 같은 신인에게 보낸 시간과 도움에 감사 드리며 불분명 한 질문에 대해 유감스럽게 생각합니다. 웹에서 읽고 데이터베이스에 대해 배우고 있습니다. 나는 올바른 도움을 청하기 위해 어떻게해야하는지 배우고 있습니다! 내가 보관하는 데이터의 과학성을 위해 서지가 필요합니다. 햄버거에 85g의 지방이 100g의 샘플에 들어 있다고 쓰면 참고 문헌 만이 사실을 증명할 수 있습니다. – vitto

+0

나는 참고 문헌이 참고 문헌이 아니라 올바른 단어라고 생각한다. – Mark

+0

에헴, 그렇다. 나는 영어 마스터가 아니다! 예 – vitto

0

테이블에 열을 더 추가하는 것은 NoSQL 시스템을 제외하고 DB 세계에서 권장되거나 널리 사용되지 않습니다.

는 당신의 의도 당신은 그 테이블을 정상화 할 필요가

2

당신은 심각하게 데이터베이스 구조를 redesiging 고려할 필요가 - 당신이 그것에 관련된 추가 데이터를 저장할 때 테이블에 열을 계속 추가하지 않는 것이 좋습니다.

관계형 데이터베이스에서 외래 키를 사용하여 테이블을 서로 연결할 수 있습니다. 데이터와 관련된 많은 값을 저장하려면 값 (value) 또는 새 테이블 (new table)을 만든 다음 원본 테이블의 ID를 새 테이블의 외래 키로 사용하십시오. 당신이 쓰기를 할 것이다 제안 디자인이 아닌 당신이 모든 열을 채울 필요가없는 가정 당신은 당신의 테이블에있을 것이다 null 값의 풍요 로움을 언급, 주요 두통을 조회 이러한

..

0

왜 , 신의 사랑을 위해, 당신은 기둥으로 이것을하고 있습니까? 그 방법은 광기를 속인다!

이 표를 행으로 분해 한 다음 각 행에 열을 넣습니다. 이것이 에 대해에 대해 더 많이 알지 못하고 그것이 왜 그런지 더 많이 말하기는 어렵습니다.

1

여기에 당신이 당신의 스키마를 변경하지 않고 하루 종일 속성을 오래 추가 할 수 있도록하기 위해 취할 수있는 한 가지 방법은 다음과 같습니다

테이블 : 식품 - 각 행은 당신이

  • 아이디
  • 을 설명하고 식품입니다
  • 이름
  • 설명
  • ...
,

테이블 : 특성 - 각 행은 음식이

  • 아이디
  • 이름
  • MINVALUE
  • MAXVALUE
  • 단위를 가질 수있는 수치 속성 (아마 '반복 그룹', 그래서해야 기술적으로는 자체 테이블에 있음)

표 : 참고 문헌 -이게 무엇인지는 모르겠지만, 당신은

  • id
  • ...

테이블 : FoodAttribute - 속성

  • 식품
  • 특성
  • 참고 문헌
  • 값을 갖는 식품의 각 인스턴스에 대해 하나 개의 레코드

그래서 당신은 할 수 있습니다 다음의 기록

,210
  • 식품 # 1 = 치즈 버거
  • 속성 # 1 = 지방 (단위 = 그램) 치즈 버거가 30g이있는 경우,

그리고 치즈 버거와 지방에 관한 어떤

  • 참고 문헌 # 1 = 의 FoodAttribute 테이블에 Food 열에 1, Attribute 열에 1, Bibliography 열에 1, Value 열에 30이있는 항목이 있습니다.

    (참고, 당신은 숫자가 아닌 속성을 처리하는 다른 메커니즘이 필요할 수 있습니다.)

    이러한 유형의 문제에 접근하는 방법에 대한 자세한 정보를 원하시면 및 데이터베이스 정규화에 대한 데이터 모델링 .. 읽기

  • 0

    질문을 여러 번 다시 읽었으며 은 실제로이 관계형 스키마를 시도하고 있으며 테이블과 관련된 열 수 (사용자가 아마도 80이라고 언급 함)와 관련이 있다고 생각합니다. 테이블에있는 80 개의 열이 전산적인 관점에서 훌륭하다는 것을 확신합니다. 데이터베이스가 처리 할 수 ​​있습니다. 코딩 측면에서 볼 때 높은 수준 일 수 있습니다.

    제안 (1) 열을 추가하려는 경우 실패합니다. 모든 열을 쉼표로 구분 된 단일 열에 효과적으로 저장합니다. 나쁜.

    이해가 안됩니다 (2). (3)

    (3)과 똑같은 것으로 들리지만 예제는 혼란스럽고 명확하지 않습니다. 5 개의 콜럼 (columsn) 또는 다른 것으로 간단한 문제로 문제를 밝히고 질문을 수정하거나 다시 게시하십시오.

    즉, 지금 당장 열의 수는 걱정하지 마십시오. 우선 순위 목록에서 낮음.

    0

    모든 레코드에 추가 할 임의의 키/값 쌍을 기반으로 쿼리를 작성할 필요가없는 경우 일 수 있습니다. 연관 배열을 pinize serialize()/unserialize()하여 넣습니다. 단일 필드

    관련 문제