如何组织表在DB中存储历史记录?

时间:2014-09-25 17:54:48

标签: database postgresql database-design relational-database

如何组织其他表/表来存储Order History

现在我的数据库结构非常简单,请参阅下面的代码:

CREATE TABLE category_table (
  id   SERIAL PRIMARY KEY NOT NULL,
  name CHARACTER(250)     NOT NULL
);

CREATE TABLE order_table (
  id             SERIAL PRIMARY KEY NOT NULL,
  total_price    DECIMAL(12, 2),
  date           TIMESTAMP WITH TIME ZONE DEFAULT now(),
  product_amount INT
);

CREATE TABLE product_table (
  id          SERIAL PRIMARY KEY             NOT NULL,
  name        CHARACTER VARYING(250)         NOT NULL,
  price       DECIMAL(12, 2),
  category_id INT,
  CONSTRAINT category_fk FOREIGN KEY (category_id) REFERENCES category_table (id)  
);

CREATE TABLE product_order_table (
  product_id INT,
  order_id   INT,
  CONSTRAINT product_fk FOREIGN KEY (product_id) REFERENCES product_table (id),
  CONSTRAINT order_fk FOREIGN KEY (order_id) REFERENCES order_table (id)
);

我需要为Order History组织关于这两个限制的表/表:

    1。我们可以删除记录表格`order_table`
    2。我们可以在`order_table`
中更改记录

我需要DB设计方面的建议。

1 个答案:

答案 0 :(得分:0)

使用另一张表" order_table_history"来跟踪历史记录是安全的。

为此表创建触发器功能" order_table"并且在插入/更新/删除等任何操作上,触发器在历史表中插入一条记录" order_table_history"。

您还可以在历史记录表中添加更多列,例如" user_id / user_name"或" operation_status =删除/更新"。

CREATE TABLE order_table_history (
  id             SERIAL PRIMARY KEY NOT NULL,
  order_id       INT,
  total_price    DECIMAL(12, 2),
  date           TIMESTAMP WITH TIME ZONE DEFAULT now(),
  product_amount INT
);