当每个对象都有值列表时创建表

时间:2018-07-20 13:27:20

标签: sql postgresql

首先,我通过以下查询创建了一个包含商店和交易信息的表:

CREATE TABLE main.store_transactions
(
   store_id                      varchar(100)   NOT NULL,
   store_name                    varchar(100),
   store_transaction_id          varchar(100),
   transaction_name              varchar(100),
   transaction_date              timestamp,
   transaction_info              varchar(200),
   primary_key(store_id)
)

但是后来我意识到同一家商店可能有与其相关的各种交易,而不仅仅是一项。在这种情况下,应如何实施表创建?

想到的一件事是用事务创建一个单独的表,每个事务都将store_id作为外键。然后在需要时加入。 如何在单个表中实现它?

1 个答案:

答案 0 :(得分:1)

嗯,最优雅的方法实际上是为stores创建一个卫星表并将其引用到store_transactions表,例如:

CREATE TABLE stores
(
   store_id         varchar(100) NOT NULL PRIMARY KEY,
   store_name       varchar(100)
);

CREATE TABLE store_transactions
(
   store_id              varchar(100) NOT NULL REFERENCES stores(store_id),
   store_transaction_id  varchar(100),
   transaction_name      varchar(100),
   transaction_date      timestamp,
   transaction_info      varchar(200)       
);

使用这种结构,您将有许多个交易到一个商店。

还有其他一些不太吸引人的选项,例如为stores自定义数据类型并在表store_transactions中创建它的数组。但是,考虑到这种方法昂贵的可维护性,我绝对不建议这样做。