SQL中的数组相当于什么?

时间:2012-05-25 03:25:27

标签: sql database

我有一个表,需要每一行存储相同类型的有序行集合。

例如,我想象的东西类似于:

class blah
{
   float yetMoreData;
};

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

实现这一目标的最佳方式是什么?

3 个答案:

答案 0 :(得分: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(例如,ID为5的Foo),请使用:

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

如果您要订购记录,通常不应该是任意的(除非用户专门选择任意顺序,例如,对待办事项列表中的项目进行排序)。通常情况下,您会对数据的某些“自然发生”属性进行排序,例如添加日期或按名称按字母顺序等等。

N.B。:这个答案是伪代码SQL - 确保在将其放入脚本之前将其调整为特定的数据库语法。 (并且不要忘记添加一些键和索引!)

答案 1 :(得分:1)

数据库通常不按特定顺序存储事物。您可以从以多种方式订购的数据库中检索事物。例如,假设你有一个表日历:

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

然后您可以按顺序检索一年中的日期:

SELECT month, day
  FROM calendar
 ORDER BY month, day;

话虽如此,有办法做你所要求的。例如,Oracle可以存储嵌套表。

答案 2 :(得分:0)

您创建两个表并在它们之间创建主键和外键关系。它将被视为嵌套表和嵌套对象。