2009-05-25 2 views
0

私はSqliteデータベースにデータを格納する必要があるiPhoneアプリケーションを設計しています。レコード内の1列が配列で、配列のサイズが固定されていない注意してくださいがSqliteデータベーステーブル:配列はレコードの1つの列になりますか?

@interface Record:NSObject { 
    NSInteger primaryKey; 
    NSString *name; 
    NSInteger priority; 
    NSMutableArray *items; 
}; 

- テーブルの

1つのレコードは次のようになります。サイズはゼロまたは任意の正の整数にすることができます。

質問:私はSqliteテーブルを設計するとき、レコードの1列として配列を指定できますか?いいえの場合は、このテーブルをどのように設計すればよいですか?

更新:ありがとうございました。私の質問への答えはNOです。もしそうなら、それを実装するために他のアーカイブメソッド、例えばProperty ListやNSKeyedArchiverを使用できますか?

答えて

1

あなたはそれを行い、正規化することはできません。自分のサイズが「固定されていない」という要件は、不可能であることを示しています。どのようにコード化するか、またはどのデータ構造を選択するかにかかわらず、これは当てはまります。それはリレーショナルデータベースの性質です。完全に理解するには、normalizationをお読みください。

1対多の外部キー関係のように聞こえます。レコードのために1つのテーブルと、その配列に終わるオブジェクトのテーブルが必要です。 2番目のテーブルには、最初の主キーに戻る外部キーがあります。

"レコード"よりもわかりやすい名前をお勧めします。それはあまりにも私には一般的すぎるようです。

+0

本当ですか?それが提出されてから3年後に下落した? – duffymo

+0

多対多は、RDBMS内の配列のストレージを正規化するプロセスです。 1つのテーブルは、レコード行の主キーとそれぞれのテーブル内の配列値行の2つの列で構成されます。配列の要素がすべてある場合と同じ数の行があるため、どちらの列も一意にはできませんが、他の表の配列の値と同じように、一意の値を持つことができます。 (申し訳ありませんが、ダウンボトムは遅いですが、私は何か他のものを探している間に答えを見ました) – SilverbackNet

+0

これは一つの方法ですが、単純な一対多の方法も同様です。 – duffymo

0

アレイをディスクにシリアル化し、その列のデータベースにファイル名/パスを格納することができます。

明らかに、配列内の何かを照会することはできません...

関連する問題