2016-08-02 6 views
1

ID를 구현하는 데 사용되는 ID 목록을 저장하는 열이 있습니까? 저는이를 쉼표로 구분 된 값으로 저장하고 데이터 형식을 varchar로 저장하려고 생각했습니다. 그러나 읽는 것이 좋지 않습니다. 전체 데이터를 가져 오지 않고 쿼리를 수행 할 수 없습니다. ID 목록에서 쿼리를 수행해야 할 수도 있습니다. 무엇이 좋은 프로그래밍 솔루션이 될 수 있습니까?Sql 열에 여러 값 저장

+0

처럼보고 (당신이 –

+0

왜 당신은 단지 하나의 열이 아닌 별도의 테이블이 필요합니까 원됩니다 경우였다 그런 다음 가입)? 어쨌든, 'field ='value '또는'value, % '또는'%, value, % '또는'%, value ''와 같은 필드와 같은 필드를 쉼표로 구분하여 쿼리 할 수 ​​있습니다. 여전히 나쁜 디자인이며 인덱스를 사용하지 않습니다. –

+0

연관 테이블 또는 [접합 테이블] (http://stackoverflow.com/a/32620163)을 사용하십시오. 그렇지 않으면 인덱스없는 덩어리입니다. – Drew

답변

2

두 열 (ID 및 FOREIGN_ID)이있는 별도의 표가 필요합니다. 원래 ID 각각에 고유 한 행을 삽입하고 새 테이블의 FOREIGN_ID 값으로 원래 테이블의 기본 키를 지정합니다. 이 새 테이블의 기본 키는 두 개의 열이 결합 된 것입니다. 예를 들어, 원래의 표는

+-------------+-------+---------+ 
| Primary_Key | ..... | ID_list | 
+-------------+-------+---------+ 
|  7  | ..... | 3,9,4 | 
+-------------+-------+---------+ 
|  9  | .... | 5,1 | 
+-------------+-------+---------+ 

새 테이블 예를 들어 줄이

+-------------+-------+  +----+------------+ 
| Primary_Key | ..... |  | ID | Foreign_ID | 
+-------------+-------+  +----+------------+ 
|  7  | ..... |  | 3 |  7  | 
+-------------+-------+  +----+------------+ 
|  9  | .... |  | 9 |  7  | 
+-------------+-------+  +----+------------+ 
          | 4 |  7  | 
          +----+------------+ 
          | 5 |  9  | 
          +----+------------+ 
          | 1 |  9  | 
          +----+------------+