2013-01-16 1 views
0

좋아, 그래서 우리는이 Table 1 (T1)과 Table 2 (T2)지정 여러 행 (MySQL의)

구조 :

T1 (main table): 
ID (Auto-Increment) 
Name 
Properties 

T2 (properties table): 
ID 
Property Name 

이의이 table 1 두 가지를 가지고 있다고 가정 해 봅시다 항목. Table 2에는 4 개의 속성이 있습니다. 내가 원하는 것은 table 1의 항목 1 속성을 속성 1, 2 및 3에 매핑하여 table 2에 설정하는 것입니다. 표 1의 항목 2에 대해 표 2의 속성 2, 3 및 4에 매핑하려고합니다.

예를 들어 BALL과 CUBE라는 두 가지 제품이 있다고 가정 해 봅시다. 그것들은 table 1에 나열됩니다. 이제 table 2에 사용 가능한 모든 색이 들어 있다고 가정 해 보겠습니다.

Table 2: 
ID COLOR 
1 RED 
2 BLUE 
3 GREEN 
4 YELLOW 

Table 1: 
ID NAME AVAILABLE_COLORS 
1 BALL (TABLE 2 ENTRY 1, TABLE 2 ENTRY 2, TABLE 2 ENTRY 3, in other words RED BLUE GREEN) 
2 CUBE (TABLE 2 ENTRY 2, TABLE 2 ENTRY 3, TABLE 2 ENTRY 4, in other words BLUE GREEN YELLOW) 

색상 표를 가리키는 데 사용 가능한 색상을 어떻게 얻을 수 있습니까? 기본적으로 내가 속성 (예 : 빨간색 -> 검정색)을 변경하면 모든 테이블 1 항목에 대해 자동으로 변경됩니다.

일반적으로 한 항목에 하나의 색만 지정하면 다른 색 항목에서는 사용할 수 없으므로 간단히 table 2에 "속합니다"또는 이와 비슷한 방식으로 열을 추가하면됩니다. table 1의 동일한 항목과 일치하는 여러 색상을 설정할 수 있지만 그 방법으로 한 항목에만 색상을 할당 할 수 있습니다 ... 볼과 빨강 모두에 빨간색을 지정할 수 없습니다.

아무도 모르게됩니다.

답변

0

일반적으로 내가 할 수있는 제품은 어떤 제품을 어떤 색으로 사용할 수 있는지 추적하는 세 번째 테이블을 만드는 것입니다. 카탈로그 테이블을 가정 해 봅시다. 그것이 저장하는 것은 주 ID와 제품 ID 및 색상 ID입니다.

Table 3: Catalog 
ID ColorsID ProductsID 
1 1 1 // row one connects with colors and products and this is a red ball 
2 2 1 // blue ball 
3 1 2 // red cube 
4 4 2 // yellow cube 

이렇게하면 필요한만큼 많은 속성을 제품에 연결할 수 있습니다. 카탈로그를 추적하는 데 더 많은 작업이 필요하지만 장기적으로는 작업을 훨씬 쉽게 만듭니다. 제품에서 사용 가능한 색상을 제거하고 해당 테이블에 제품 ID 및 제품 이름 만 저장하십시오. 색상으로 반드시 변경되지 않는 설명과 같은 표준입니다. 이렇게하면 사용 가능한 색상을 3에서 10으로 변경하면 추적 할 새 필드를 추가 할 필요가 없습니다. 카탈로그를 가져 와서 제품이 현재 해당 색상으로 제공되는지 여부를 추적하는 활성 또는 재고와 같은 추가 필드를 추가 할 수도 있습니다. 카탈로그에서 재고 번호를 저장할 수도 있습니다. 색상에 따라 가격이 다른 경우에는 어떻게해야합니까? 하얀 공은 더 싸다? 정상적인 데이터에 대한 모든 좋은 이유.

정규화는 각 테이블에 최소 필드가 있는지 확인하고 종속성을 제거하는 것입니다. 이론 수준에서의 정규화에 대한 좋은 설명을 보려면이 대답을보십시오. Normalization in MYSQL

그런 다음 JOINS를 사용하여 모두 연결하여 카탈로그 테이블을 순환 할 수 있습니다. 여기에서 찾을 수 있습니다 조인에

SELECT Colors.ColorID as Color, Products.ProductID as Product 
FROM Catalog 
    INNER JOIN Colors 
     ON Catalog.ColorsID = Colors.ColorID 
    INNER JOIN Products 
     ON Catalog.ProductsID = Products.ProductID 

상세 정보 - http://en.wikipedia.org/wiki/Join_%28SQL%29

+0

신난다! 응답 주셔서 감사합니다, 이것은 정확히 내가 뭘 할거야! – TechnIckS

+0

가격과 같이 카탈로그에 새로운 필드와 속성을 추가해야하거나 여러 색상이나 기타를 원할 경우 작업을 훨씬 쉽게 할 수 있습니다. – donlaur