1

たとえば、ユーザーがonsoapの価格で商品を購入したとします。これは、およびのテーブルの下のデータベースに記録されています。1.5020th sept 2012purchaseproductIDdate

2012 年 9 月 22 日に、管理者が の価格をsoapに変更し1.20たとします。これにより、レポートの価格が変更されました。

1.50古いデータが古いレポートと1.20新しいレポート用に保存されていることを確認する最善の方法は何ですか。製品名、製品価格を含むすべてのデータをpurchaseテーブルに挿入する必要がありますか?

4

4 に答える 4

2

あなたの質問に対する簡単な答えはイエスです。

金融システムに関して言えば、「トランザクション」の監査が必要なシステムはすべて、「ドキュメント」または「レコード」に全体を保存する必要があります。

データベースからデータを実際に削除または変更する代わりに、「フラグ」(EG current、deleted、modified など)、「from_date」および「to_date」を使用して各削除または変更を記録する方法もありますが、これはより多くのデータを使用します。サーバー リソースとプログラミングは、mySQL だけでなく PHP でも大幅に複雑になります。ただし、同時に提供できるのはレコード間の関係のみです。

私の提案は、シンプルに保ち、必要なすべてのデータを 1 つのレコードに格納することです。システムの監査が必要になった場合でも、時間を節約でき、法的にも安全です。

頑張ってください。

于 2012-09-24T10:58:00.060 に答える
0

私は最近、あなたが説明したものに近い製品に取り組んでいます。そして、あなたの答えは、プロジェクトを実装する意思がある複雑さのレベルに依存すると思います. 最も簡単な方法は、製品情報を請求書レコードに保存することです。しかし、これは時間の経過とともに冗長性につながります。

一方、リビジョン メカニズムを実装して、時間の経過に伴うレコードの変更を追跡できます。これは、レコードに 1 つではなく 2 つの ID を使用することで簡単に実行できます。サンプルテーブルは次のとおりです。

CREATE TABLE IF NOT EXISTS `product` (
  `product_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `entity_id` bigint(20) unsigned NOT NULL,
  `name` varchar(255) NOT NULL,
  `price` double NOT NULL DEFAULT '0',
  PRIMARY KEY (`product_id`),
  KEY `inx_entity_id` (`entity_id`)
) DEFAULT CHARSET=utf8 ;

product_id通常の自動インクリメント IDentity_idですが、同じ製品のすべてのレコードで同じである特別な ID です。この設計では、レコードを削除したり、更新したりすることはありません。常にテーブルに挿入するだけで、製品のリストを取得する必要がある場合は、以上のグループが適切であることを覚えておく必要がありますentity_id。製品情報は、最大のレコードで見つけることができますproduct_id。おそらく、s を追跡するためにエンティティ テーブルを作成する必要があるかもしれませんentity_id

この設計は、製品の情報を請求書にコピーするよりも複雑です。しかし、それには非常に多くの大きな利点があります。製品の価格変動を追跡できるように。または、外部キーをproduct_id使用して製品の 1 つの特定のリビジョンを指すentity_idか、特定のリビジョンの代わりに を使用して製品タイプを示すことができます。もちろん、その複雑さには費用がかかりますが、それだけの価値があるかどうかを判断できるのはあなたです.

于 2012-09-24T13:37:22.133 に答える
0

購入テーブルに商品名を格納する必要はないと思いますが、商品価格は格納しておくべきだと思います。

また、購入テーブルに製品名を保存しない場合は、製品の削除に注意する必要があります。おそらくそれらを削除するのは最善のアイデアではないので、ストアからは非表示にする必要がありますが、データベースからは削除しないでください。

于 2012-09-24T10:44:01.443 に答える
0

私は通常、製品の価格を productID と日付とともに purchase テーブルに格納します。または、カートに複数のアイテムを入れることができる場合は、purchase テーブルと purchase_product テーブルを作成します。これは、クーポンコードなどを追加すると、その特定の購入でその人が商品に支払った金額をいつでも確認できるようになる.

于 2012-09-24T12:28:04.683 に答える