教師の一つは、私たちに次のような課題ました:これはSQLではどのようなアプローチですか、実際には存在しますか?それは実行可能な/良いpraticeですか?
「を以下の原理を使用したデータベースのスキーマを作成します。 あなたが任意のテーブルの任意の値を変更することはできません、だけで新しいものを追加します。」
私は、次のスキーマに付属している:
CREATE TABLE TRANSACTIONS(ID PRIMARY KEY, TRANSACTION_TYPE_FK, DATE);
CREATE TABLE TRANSACTION_TYPE(ID PRIMARY KEY, NAME);
CREATE TABLE PRODUCTS_TRANSACTIONS(ID_PROD_FK, ID_TRANS_FK, MONEY, QTY);
CREATE TABLE PRODUCTS(ID PRIMARY KEY, NAME, PRICE_FK);
CREATE TABLE PRICES(ID PRIMARY KEY, DATE, DETAILS);
それは概念だけの証拠です。基本的にはすべてがトランザクションに基づいています。
取引は、入金、出金、移動商品、および&出金とすることができます。
私はトランザクションに基づいて自分の数量と現金を管理することができます。
PRODUCTS_TRANSACTIONS "MONEY"フィールドは、取引に金額のみが含まれている場合、または取引に「割引」または「税金」がある場合に使用されます。
製品表は、「価格」と呼ばれる「子」テーブルを持っている、それはすべての価格変化をストレージ、「詳細」の欄には「費用価格」などの注釈のためであるなど
私はそれが非常に迅速に行われ、矛盾して申し訳ありません。
私はこのようなアプローチが好きでした。私はSQLを初心者にしています。このアプローチに名前が付いていて、それが実行可能かどうか、または実行可能かどうかを知りたかったのです。
新しいトランザクションが作成されるたびに、ビューを作成して「更新」することは、ビューに新しい行を追加するだけで済みます。
私は現在非常に気分が悪いので、私は疑いを是正するために大学に行くことができません。任意のヘルプ
「値を変更するために更新コマンドを使用できません」という意味は分かりませんが、履歴を保持する場合は、テーブルにトリガーを作成して古い/更新されたデータを別のテーブルに保存できます。 –
"あなたはどのテーブルのどの値も変更することはできません。追加するだけです。変更を削除して再計算する" – LouizFC
どのDBMS(ベンダーとバージョン)ですか? 'TRIGGERの代わりに'を読んでいるかもしれません。 ** DBMSが何かをやる前にあなたの行動を** **置くことができます。現在の行の 'ValidTo'日付を設定し、更新*の代わりに新しい値*を挿入するか(古い値を履歴テーブルにプッシュする) – Shnugo