0

コンテナー (表 1) とオブジェクト/コンテナー データ (表 2) の 2 つのテーブルで構成されるデータベース構造 (Android の SQLite) を設計しています。

表 1 には、コンテナー データのキーと、コンテナー/オブジェクト内のキーのリストが含まれます。表 2 には、オブジェクト/コンテナのデータ (タイトル、説明、カテゴリ、写真など) が含まれます。

この設計では、コンテナーに移動し、そのデータ (タイトル、画像) を取得し、保持しているアイテムのリストを順番に取得してから、各アイテム データ (画像、場合によってはタイトル) を検索できます。その後、ユーザーは項目をクリックし、それがオブジェクトの場合はそのデータに移動し、コンテナーの場合はこのプロセスを繰り返します。

ID がどのテーブルに属しているかを知ることができるように、各テーブルの ID を設定するにはどうすればよいですか。たとえば、ID が偶数の場合はテーブル 1 を指し、奇数の場合はテーブル 2 を指します。

今ではかなり明白な答えを見つけたのではないかと思います...テストするだけです。基本的に、行を作成するときに必要なものに ID を設定することで、カスタム ID を設定できます。

INSERT INTO test1(rowid, a, b) VALUES(123, 5, 'hello');

http://www.sqlite.org/autoinc.htmlから入手しました(2 日前に見ていたらよかったのに :)) そして今、行かなければならないので、機会。

私の唯一の懸念は(それが機能する場合)、使用しないIDの間に空の行が作成され、スペースが無駄になることだと思いますか?

また、2 つの個別のリストを持つことも検討しましたが、順序が重要であるため、オブジェクトの順序を追跡するために別のリストが必要になるため、キー操作が可能かどうか疑問に思っています。

4

1 に答える 1

2

コンテナーとオブジェクトに共通のプロパティがある場合、共通のプロパティを含むベース テーブル (アイテム) と、追加のデータ (継承) のみを含むコンテナー テーブルとオブジェクト テーブルを作成できます。

これは、Table-per-Type 階層 (TPT) として知られています。[1] と [2] に関する詳細情報。

コンテナは、単純な外部キーを使用してアイテムにリンクできます。これは、コンテナであるかオブジェクトであるかに関係なく、そこにエントリがあるためです。

オブジェクトのみが必要な場合は、コンテナーからすべてのアイテムを選択し、オブジェクト テーブルで INNER JOIN を実行します。このように、コンテナではなくオブジェクトのみを取得します。コンテナのみが必要な場合は、コンテナ テーブルと結合します。コンテナとオブジェクトの両方が必要で、(Item ベース テーブルにない) すべての追加データが必要な場合は、オブジェクト テーブルで LEFT OUTER JOIN を実行してから、コンテナ テーブルで LEFT OUTER JOIN を実行できます。

参考文献:

[1] http://www.sqlteam.com/article/implementing-table-inheritance-in-sql-server

[2] http://blogs.devart.com/dotconnect/table-per-type-vs-table-per-hierarchy-inheritance.html

于 2012-10-06T10:53:07.147 に答える