2012-05-25 4 views
1

같은 유형의 정렬 된 행 컬렉션을 저장하기 위해 각 행을 필요로하는 테이블이 있습니다. 이를 달성하는 가장 좋은 방법이 될 것입니다 무엇SQL에서 배열과 동일한 것은 무엇입니까?

class blah 
{ 
    float yetMoreData; 
}; 

class foo 
{ 
    int data; 
    String moreData; 
    blah[] anOrderedCollectionOfBlahClasses; 
}; 

:

예를 들면, 나는 비슷한 상상입니까?

답변

3

당신은 Blah을 원하는 FooBlahFoo와 대일 관계가 별도의 테이블이 될 수 있습니다. Blah 테이블의 레코드에는 부모 Foo 레코드를 식별하는 외래 키 foo_id이 있어야합니다. Blah에는 결과를 정렬 할 수있는 index_in_array 특성이 있습니다.

CREATE TABLE Foo (
    id BIGINT, 
    data INT, 
    moreData CHAR(50) 
); 

CREATE TABLE Blah (
    id BIGINT, 
    yetMoreData DOUBLE, 
    foo_id BIGINT, 
    index_in_array INT 
); 

주어진 Foo의 모든 Blah의를 얻고 싶다면 (예를 들어, 5의 ID와 Foo), 사용 :

SELECT * FROM Blah 
WHERE Blah.foo_id = 5 
ORDER BY Blah.index_in_array; 

것은 당신이 일반적으로, 그것을 기록을 주문하는 경우 (임의적 인 순서가 사용자에 의해 특별히 선택되지 않는 한, 예를 들어 할 일 목록의 항목 정렬과 같은) 임의적 인 것으로해서는 안됩니다. 일반적으로 추가 된 날짜 또는 이름순으로 알파벳 순으로 데이터의 "자연 발생적"속성을 정렬합니다.

NB :이 답변은 의사 코드 SQL을 의미합니다. 스크립트로 던지기 전에 특정 데이터베이스 구문으로 (그리고 일부 키와 인덱스를 추가하는 것을 잊지 마라!)

+0

내가 사용했던 것에서 다소 뒤떨어져있는 것처럼 보이지만 요소는 그 반대의 대신에 주된 클래스를 참조한다. 그러나 이상하게 여겨진다. 일종의. – Lalaland

1

데이터베이스는 일반적으로 특정 순서로 물건을 저장하지 않습니다. 여러 가지 방법으로 정렬 된 데이터베이스에서 항목을 검색 할 수 있습니다.

CREATE TABLE month AS (
    id  NUMBER, 
    month NUMBER, 
    day  NUMBER 
); 

당신은 다음 순서로 그 해의 일을 검색 할 수 있습니다 :

말했다되고 그건
SELECT month, day 
    FROM calendar 
ORDER BY month, day; 

, 당신이 요구하는지 무엇을 할 수있는 방법이 있습니다 예를 들어, 테이블 달력을 가지고 말 . 예를 들어 오라클은 중첩 테이블을 저장할 수 있습니다.

0

두 테이블을 만들고 기본 키와 외래 키 관계를 만듭니다. 중첩 된 테이블 및 중첩 된 개체로 처리됩니다.

관련 문제