2012-05-25 4 views
1

У меня есть таблица, которая нуждается в каждой строке для хранения упорядоченного набора строк того же типа.Что было бы эквивалентом массива в SQL?

например, я себе что-то подобное:

class blah 
{ 
    float yetMoreData; 
}; 

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

Что бы быть лучшим способом для достижения этой цели?

ответ

3

Вы хотите, чтобы Blah и Foo были отдельными таблицами, где Blah имеет отношения «много-к-одному» с Foo. Записи в таблице Blah должны иметь внешний ключ foo_id, идентифицирующий их родительскую запись Foo. 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 
); 

Если вы хотите, чтобы получить все Blah х данного Foo (скажем, Foo с идентификатором 5), использование:

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; 

Это, как говорится, есть способы, чтобы сделать то, что вы просите , Oracle, например, может хранить вложенные таблицы.

0

Вы создаете две таблицы и создаете связь между Первичным ключом и внешним ключом. Он будет рассматриваться как вложенные таблицы и для ваших вложенных объектов.

Смежные вопросы