我有一个表,它需要每一行来存储相同类型的行的有序集合。
例如,我正在想象类似于:
class blah
{
float yetMoreData;
};
class foo
{
int data;
String moreData;
blah[] anOrderedCollectionOfBlahClasses;
};
实现这一目标的最佳方法是什么?
您希望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
给定的所有 s Foo
(例如Foo
ID 为 5 的 s),请使用:
SELECT * FROM Blah
WHERE Blah.foo_id = 5
ORDER BY Blah.index_in_array;
如果您正在订购记录,通常不应该是任意的(除非用户专门选择了任意顺序,例如,对待办事项列表中的项目进行排序)。通常,您对数据的某些“自然发生”属性进行排序,例如添加日期或按名称字母顺序等。
注意:这个答案是伪代码 SQL——确保在将其放入脚本之前使其适应特定的数据库语法。(并且不要忘记添加一些键和索引!)
数据库通常不按特定顺序存储事物。您可以从以多种方式排序的数据库中检索事物。例如,假设您有一个表格日历:
CREATE TABLE month AS (
id NUMBER,
month NUMBER,
day NUMBER
);
然后,您可以按顺序检索一年中的日期:
SELECT month, day
FROM calendar
ORDER BY month, day;
话虽这么说,有办法做你所要求的。例如,Oracle 可以存储嵌套表。
您创建两个表并在它们之间创建主键和外键关系。它将被视为嵌套表和每个嵌套对象。