当我已经有了索引时,如何以及为什么将主键添加到我的 SQL 数据库表中

我有一个名为 datatable 的 sql 表,

date       yesteday today tomorrow reading source
2021-01-01 x        x     x        x       1
2021-01-01 x        x     x        x       2
2021-01-01 x        x     x        x       3
...
2021-01-02 x        x     x        x       1
2021-01-02 x        x     x        x       2
2021-01-02 x        x     x        x       3
...
2021-05-31 x        x     x        x       1
2021-05-31 x        x     x        x       2
2021-05-31 x        x     x        x       3

当我创建表时,我设置了以下内容,

create table datatable 
(
    date date,yesterday real,today real,tomorrow real,reading real,source varchar
)

然后我创建了一个索引:

create index datatable_idx on datatable (date,source)

每天,源编号都会重复。所以日期和来源将是唯一的。

我想改进我的数据收集和存储过程。有人告诉我应该创建一个主键。

我猜这里使用的命令是

ALTER TABLE datatable ADD PRIMARY KEY (date,source)

我的问题是我为什么要这样做,这与我创建的索引有什么区别。会影响我的流程吗?

另外,下次我创建表时,我是否必须像这样创建索引和主索引,或者有没有办法在创建时同时创建?

dhtz126 回答:当我已经有了索引时,如何以及为什么将主键添加到我的 SQL 数据库表中

主键是一个约束,指定其列中的值必须(相互)唯一且不为空。这样可以保证唯一标识表中的每一行,这在想要创建引用此表的外键时最有用。如果您没有其他表,它仍然值得拥有,因为它可以防止您的表进入不良状态,例如,您在特定日期拥有多个相同的源值。

主键字段几乎总是有一个索引,它们经常用于查找和联接,但这两个概念是分开的。

一些 DBMS(例如 MySQL、SQL Server)会自动在主键上创建聚集索引,这意味着表中的数据在磁盘上按组成主键的字段进行排序,以使上述常见操作更快. However,postgres does not do this by default.

您可以使用以下语法在创建表时指定主键:

create table datatable 
(
    date date,yesterday real,today real,tomorrow real,reading real,source varchar,PRIMARY KEY (source,date)
)

您还可以添加一个新的、自动递增的整数字段作为您的主键(通常称为代理键人工键)。如果您的数据项中没有任何其他合适的候选对象,您可能想要这样做,但它也有其他好处(例如可能更快的 JOIN)。

create table datatable 
(
    id serial primary key,date date,source varchar
)
本文链接:https://www.f2er.com/325005.html

大家都在问