복붙노트

[SQL] DB를 컬럼의 목록을 저장하는 방법

SQL

DB를 컬럼의 목록을 저장하는 방법

나는 데이터베이스에 객체 FOO를 저장하고 싶습니다. FOO 세 정수와 "과일"의 목록을 포함 말할 수 있습니다.

목록은 길이를 가질 수있다, 내가 알고있는 유일한 것은 허용되는 모든 과일이 다른 테이블에 저장되어 있다는 점이다.

나는 열에서 과일 목록을 저장할 수 있습니까?

해결법

  1. ==============================

    1.정규화 된 관계형 데이터베이스, 이러한 상황은 받아 들일 수없는 것입니다. 당신은 접합 테이블을해야하는 저장 FOO 객체의 각각 별개의 ID와 과일의 ID에 대한 하나의 행. 같은 행의 존재는 열매가 FOO에 대한이 목록에 의미합니다.

    정규화 된 관계형 데이터베이스, 이러한 상황은 받아 들일 수없는 것입니다. 당신은 접합 테이블을해야하는 저장 FOO 객체의 각각 별개의 ID와 과일의 ID에 대한 하나의 행. 같은 행의 존재는 열매가 FOO에 대한이 목록에 의미합니다.

    CREATE TABLE FOO ( 
      id int primary key not null,
      int1 int, 
      int2 int, 
      int3 int
    )
    
    CREATE TABLE Fruits (
      id int primary key not null,
      name varchar(30)
    )
    
    CREATE TABLE FOOFruits (
      FruitID int references Fruits (ID),
      FooID int references FOO(id),
      constraint pk_FooFruits primary key (FruitID, FooID)
    )
    

    ID = 5, 당신은 것 특정의 FOO 개체의 목록에 애플 과일을 추가하려면 :

    INSERT FOOFruits(FooID, FruitID)
    SELECT 5, ID FROM Fruits WHERE name = 'Apple'
    
  2. ==============================

    2.당신은 확실히 확실합니다 (예를 들어, 목록의 값을 조회 할 필요가 없습니다 즉.) 당신이하고있는의 경우, 당신은 또한 당신의 객체 또는 그냥 목록 개체를 직렬화, 이진에 저장할 수 기둥.

    당신은 확실히 확실합니다 (예를 들어, 목록의 값을 조회 할 필요가 없습니다 즉.) 당신이하고있는의 경우, 당신은 또한 당신의 객체 또는 그냥 목록 개체를 직렬화, 이진에 저장할 수 기둥.

    그냥 문자 분리 값이 미세 너무, 그리고 저장 및로드의 측면에서 저렴하지만 데이터가 구분 문자를 포함하거나 탈출하지 않습니다주의 (그리고 그에 따라 탈출을 처리 할 수로드하는 동안, 등 ... 당신의 선택의 언어는하지만, 당신보다이에서 더 나은 일을 할 수있다.))

    그러나, "적절한"솔루션, 메흐 다드 위에서 설명한 일을.

  3. ==============================

    3.그것의 기술적으로 가능하지만, IMO, 매우 가난 디자인 될 것이다.

    그것의 기술적으로 가능하지만, IMO, 매우 가난 디자인 될 것이다.

    당신은 문자열을 구축하고 (SQL Server 또는 이에 상응하는 도구를 사용하는 경우) NVARCHAR (최대) 필드에 저장하여 그것을 할 수 있습니다.

  4. ==============================

    4.당신은 할 수 있지만 가능성이 열의 검색이 어렵고 느리게 만드는 텍스트로 처리됩니다. 당신은 더 나은 관련 테이블을 사용하는 것.

    당신은 할 수 있지만 가능성이 열의 검색이 어렵고 느리게 만드는 텍스트로 처리됩니다. 당신은 더 나은 관련 테이블을 사용하는 것.

  5. ==============================

    5.일부 데이터베이스는 여러 개의 값이 단일 행의 단일 컬럼에 저장 될 수 있지만, 일반적으로 별도의 테이블을 사용하는 것이 더 편리합니다.

    일부 데이터베이스는 여러 개의 값이 단일 행의 단일 컬럼에 저장 될 수 있지만, 일반적으로 별도의 테이블을 사용하는 것이 더 편리합니다.

    두 개의 열, 오브젝트 테이블의 기본 키에 대한 포인터를 포함하는 하나의, 그리고 과일 테이블의 기본 키에 대한 포인터를 포함하는 하나있는 테이블을 만듭니다. 객체가 세 개의 과일이있는 경우 그런 다음 object_fruit 테이블 모든 모든 점 같은 객체하지만, 세 가지 다른 과일에있는 세 개의 행이 있습니다.

  6. ==============================

    6.

    INSERT FOOFruits (FooID, FruitID)
    SELECT 5, ID 
    FROM   Fruits 
    WHERE  name IN ('Apple', 'Orange');
    
  7. from https://stackoverflow.com/questions/444251/how-to-store-a-list-in-a-db-column by cc-by-sa and MIT license