1

同じタイプの行の順序付けられたコレクションを格納するために各行が必要なテーブルがあります。

たとえば、次のようなものを想像しています。

class blah
{
   float yetMoreData;
};

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

これを達成するための最良の方法は何ですか?

4

3 に答える 3

3

とが と多対 1 の関係にある別のテーブルにする必要がBlahあります。テーブル内のレコードには、親の Foo レコードを識別する 外部キーが必要です。結果をソートできる属性もあります。FooBlahFooBlahfoo_idBlahindex_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(たとえば、FooID が 5 の )、次を使用します。

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

レコードを並べ替える場合、通常は恣意的なものであってはなりません (その恣意的な順序がユーザーによって特に選択された場合を除きます。たとえば、to-do リストのアイテムを並べ替えるなど)。通常、データが追加された日付や名前のアルファベット順など、データの「自然に発生する」プロパティに基づいて並べ替えます。

注意: この回答は疑似コード SQL であることを意図しています。スクリプトに入れる前に、特定のデータベース構文に適合させてください。(そして、いくつかのキーとインデックスを追加することを忘れないでください!)

于 2012-05-25T03:41:20.287 に答える
1

データベースは通常、物事を特定の順序で保存しません。複数の方法で順序付けされたデータベースから物事を取得できます。たとえば、卓上カレンダーがあるとします。

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

次に、年間通算日を次の順序で取得できます。

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

そうは言っても、あなたが求めていることを行う方法があります。たとえば、Oracle はネストされたテーブルを格納できます。

于 2012-05-25T03:31:51.897 に答える
0

2 つのテーブルを作成し、それらの間に主キーと外部キーの関係を作成します。ネストされたテーブルとして、ネストされたオブジェクトごとに扱われます。

于 2012-05-25T03:32:10.993 に答える