3

データストレージにSQLiteを利用するblackberryアプリ(台帳管理システム)を開発しました。

アプリで作成したテーブル間にはいくつかの関係があります

以下は、テーブルとその列の一部です。

1. Customer Details-Name,Phone,Email
2. Bills-Name,Amount
3. Update Customer-Name
4. Update Bills-ID

および他の多くの一時テーブル。

アプリを開発している間、テーブルが正規化されているかどうかを調べようとはしませんでした。

アプリを完成させた後、正規化が必要かどうか疑問に思います。

私のクエリのほとんどは、顧客および請求書フォームに挿入されたレコードを選択し、それらを操作することに基づいていました。

たとえば、すべての顧客データをキャプチャする顧客詳細テーブルがあります。名前がデータベースに記録されると、テーブルに同じ名前が再び存在することを望まないため、正規化の概念が必要になります。

また、SQLite のような RDBMS では、正規化が不可欠です。DBMS ベースのテーブルと同じ意味を持ちますか。

また、データベースの正規化に関して、OLAPシステムとOLTPシステムの間に違いはありますか。はいの場合、Blackberry アプリは何に分類されますか?

これについて誰かが音を立てたら、ガイダンスに感謝します。

4

2 に答える 2

5

データベースの正規化は、リレーショナル データベースを指します。SQLite は、 Oracle、MySQL、または Postgress のようなRDBMSです (DBMS ベースのテーブルの意味だと思います)。したがって、正規化は SQLite に格納されたデータベースに適用されます。もちろん、キー値ストアのように SQLite を使用することもできますが、それはあなたのケースではないようです。

データベースの正規化は非常に重要ですが、テーブルを慎重に設計すると、通常は試行しなくても3FNのデータベースになります。より高い FN を求めることは、アプリケーションにとっておそらく必須ではありません。

OLAP データベースは通常、効率上の理由から非正規化されたデータを保持します。パフォーマンスの問題に悩まされていて、自分が何をしているのかを知っている場合を除き、特に小さなアプリケーションでは、これを実行しようとしないでください。

人の名前をキーにしているようです。数字の識別子を各人に割り当てて代わりに使用する方がおそらく良いでしょうが、これはアプリケーションでは問題にならないかもしれません。

于 2012-06-19T18:33:52.977 に答える
3

顧客テーブルに重複行が挿入される問題を回避するには、正規化が必要です。どの程度かはあなた次第です。正規化とは何か、なぜ正規化が使用されるのかを読むことで、いくつかの良いことを学ぶことができます。

データベースで望ましくないのは、データの冗長性です (効率に関する理由で計画されている場合を除く)。冗長性は矛盾を引き起こす可能性があります。必要なのはデータの一貫性です。あなたの場合、非常に小さなデータベースを持っているように見えるので、冗長性は必要ありません。

これは、私がどのように行ったかの例です。

Customer:   custId(PK), custName,
Bills:      billId(PK), custId(FK), amount, timesStamp
CustPhone:  custId(PK)FK), type(PK), number
CustMail:   custId(PK)(FK), type(PK), mail

たとえば、顧客からすべての請求書を取得するには、次のようになります。

SELECT Customer.custId, Bills.billId, Bills.amount, Bills.timeStamp Customer.custName
FROM Bills
JOIN Customer
ON Customer.custId = Bills.custId;

これにより、一意の顧客に関連付けられた一意の請求書が得られます。主キーは名前ではなく ID であるため、顧客の名前は重要ではありません。

正規化の基本的な概念を理解していないと作業が非常に難しいため、正規化についてよく読んでおくことをお勧めします。

于 2012-06-19T20:23:20.467 に答える