首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确设置表上的主键?

如何正确设置表上的主键?
EN

Stack Overflow用户
提问于 2022-05-27 19:08:05
回答 2查看 91关注 0票数 0

我有点困惑,我见过的所有平板电脑(我没见过这么多)都有一个自动增量字段作为它们的主键。

这是设置主键的最佳方法吗?

例如,下面的表名为Assets,用于库存,我不知道将字段设置为主键的最佳方法

问:我不知道是将自动增量字段(indentity)设置为主键,还是将code字段设置为主键

Way one

代码语言:javascript
复制
CREATE TABLE Asset_A
(
    code INT NOT NULL,
    name VARCHAR(150),
    PRIMARY KEY(code)
);

路二

代码语言:javascript
复制
CREATE TABLE Asset_B
(
    id INT IDENTITY,
    code INT NOT NULL, -- BUT THIS IS THE CODE OF ASSET. For SECOND PK?
    name VARCHAR(150),
    PRIMARY KEY(id)
);

code字段是一个数字字段,其中为这个资产设置了唯一的ID : name: iPhone 10代码: 1000等等。

带有数据的表的示例:

代码语言:javascript
复制
GO
INSERT INTO Asset_A
    (code,name)
VALUES
    (1000, 'iphone 10'),
    (1001, 'iphone 11'),
    (1002, 'iphone 12'),
    (1003, 'Samsung Galaxy S8'),
    (1004, 'Samsung Galaxy S9'),
    (1005, 'Samsung Galaxy S10');
GO
INSERT INTO Asset_B
    (code,name)
VALUES
    (1000, 'iphone 10'),
    (1001, 'iphone 11'),
    (1002, 'iphone 12'),
    (1003, 'Samsung Galaxy S8'),
    (1004, 'Samsung Galaxy S9'),
    (1005, 'Samsung Galaxy S10');

GO
SELECT *
FROM Asset_A 

GO
SELECT *
FROM Asset_B

GO
sp_columns Asset_A;
GO
sp_columns Asset_B;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-27 21:28:49

你的问题并不是因为缺乏经验而造成的。这是一个判断的召唤。

在您的示例中,表示现有资产的密钥称为“自然”密钥,即代码。系统生成的密钥称为“代理”密钥,在您的情况下,是id。

你应该使用代孕钥匙还是坚持使用天然的钥匙?好吧,每个人都有自己的优点和缺点,这是一个巨大的争论,你会发现大量的信息来源。我个人最好的链接是。评论中还有其他链接,可能还会出现在其他答案中。搜索更多的互联网,也。

如果我不得不离开我的方式,根据我自己的经验和我发现你的代码有多少“关键价值”来为你选择,我确实会使用代码而不是代理程序。但是,这是主观的。阅读,学习,练习,和这些类型的判断调用将变得更容易。

票数 2
EN

Stack Overflow用户

发布于 2022-05-27 19:26:22

主键在表中必须是唯一的,并且在同一表中没有第二个主键。您可以有另一个唯一的非聚集索引,但不能有第二个主键.在这种情况下,如果保证code在每一行的所有其他列中都是唯一的,那么它将作为主键工作,您将不需要IDENTITY列。

我建议对主键和如何选择它们做一些额外的研究。当然,具有IDENTITY集的列必须是主键,这是不可能的。但是,也有一些限制,例如Server中的PK不能大于900个字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72410045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档