我有一个SQL服务器表,我在其上插入帐户明智的数据。相同的帐号不应在同一天重复,但如果日期更改,则可以重复。
客户根据日期和帐号检索数据。
简而言之,日期+帐号是唯一的,不应重复。
由于两者都是不同的字段,我应该连接两个字段并创建第三个字段作为主键,或者可以选择在合并值上使用主键。
请以最佳方式指导。
答案 0 :(得分:2)
您可以创建复合主键。创建表时,可以在SQL Server中执行此类操作;
CREATE TABLE TableName (
Field1 varchar(20),
Field2 INT,
PRIMARY KEY (Field1, Field2))
看看这个有助于SQL的每种风格的问题
答案 1 :(得分:1)
完全没有。只需使用主键约束:
alter table t add constraint pk_accountnumber_date primary key (accountnumber, date)
您也可以在create table
声明中包含此内容。
但是,我可能会建议您使用自动递增/标识/串行主键 - 每行的唯一编号。然后将帐号/日期组合声明为唯一键。我更喜欢这样的合成主键有几个原因:
答案 2 :(得分:1)
另一种方法是使PK为自动递增数,然后在自然键上放置唯一的唯一索引。通过这种方式,可以保留唯一性,但您可以尽可能快地加入任何子表。如果表不会有子表,那么复合PK是个好主意。如果有很多子表,这可能是更好的选择。
答案 3 :(得分:1)
请看一下,它将清除大部分疑问!
我们可以声明2列或更多列作为主键。
在这种情况下,主键中包含的每一列都将被调用:复合键
请注意,复合键永远不能为空!
现在,首先让我向您展示如何将2列或更多列用作主键。
create table table_name ( col1 type, col2 type, primary key(col1, col2));
好处是: 1)我 col1的值为(X),而 col2的值为(Y),那么其他任何行都不能将col1设置为(X),col2设置为(Y)。>
2) col1,col2必须具有一些值,它们不能为null!
希望有帮助!