2012-05-25 16 views
1

我有一個表需要每一行來存儲相同類型的行的有序集合。什麼是SQL中數組的等價物?

例如,我想象類似的東西:

class blah 
{ 
    float yetMoreData; 
}; 

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

什麼是實現這一目標的最佳方式是什麼?

回答

3

您希望BlahFoo爲單獨的表格,其中BlahFoo具有多對一的關係。 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; 

如果你訂購的記錄,通常它不應該受到任何東西的武斷(除非該用戶專門選擇了任意順序,例如,將待辦事項列表上的項目排序)。通常情況下,您可以根據數據的某些「自然發生」屬性進行排序,例如添加日期或按名稱的字母順序排序等。

注意:此答案旨在爲僞代碼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

您創建兩個表並在它們之間創建主鍵和外鍵關係。它將被視爲嵌套表格和每個嵌套對象。

相關問題