同じタイプの行の順序付けられたコレクションを格納するために各行が必要なテーブルがあります。
たとえば、次のようなものを想像しています。
class blah
{
float yetMoreData;
};
class foo
{
int data;
String moreData;
blah[] anOrderedCollectionOfBlahClasses;
};
これを達成するための最良の方法は何ですか?
とが と多対 1 の関係にある別のテーブルにする必要がBlah
あります。テーブル内のレコードには、親の Foo レコードを識別する 外部キーが必要です。結果をソートできる属性もあります。Foo
Blah
Foo
Blah
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
);
Blah
特定の のすべての を取得する場合Foo
(たとえば、Foo
ID が 5 の )、次を使用します。
SELECT * FROM Blah
WHERE Blah.foo_id = 5
ORDER BY Blah.index_in_array;
レコードを並べ替える場合、通常は恣意的なものであってはなりません (その恣意的な順序がユーザーによって特に選択された場合を除きます。たとえば、to-do リストのアイテムを並べ替えるなど)。通常、データが追加された日付や名前のアルファベット順など、データの「自然に発生する」プロパティに基づいて並べ替えます。
注意: この回答は疑似コード SQL であることを意図しています。スクリプトに入れる前に、特定のデータベース構文に適合させてください。(そして、いくつかのキーとインデックスを追加することを忘れないでください!)
データベースは通常、物事を特定の順序で保存しません。複数の方法で順序付けされたデータベースから物事を取得できます。たとえば、卓上カレンダーがあるとします。
CREATE TABLE month AS (
id NUMBER,
month NUMBER,
day NUMBER
);
次に、年間通算日を次の順序で取得できます。
SELECT month, day
FROM calendar
ORDER BY month, day;
そうは言っても、あなたが求めていることを行う方法があります。たとえば、Oracle はネストされたテーブルを格納できます。
2 つのテーブルを作成し、それらの間に主キーと外部キーの関係を作成します。ネストされたテーブルとして、ネストされたオブジェクトごとに扱われます。