Database design 数据库设计-查找表

Database design 数据库设计-查找表,database-design,Database Design,您如何标记代码,顺序号1,2,3,4…n 范例 我的DeviceType查找表包含移动设备,并具有以下属性 Id Code Name 在MySQL中,您可以将字段(即列)描述为自动增量,当您将新闻行插入表中时,它将更新您的代码字段。我相信这对于许多(如果不是全部的话)SQL系统来说是很常见的。查看MySQL操作的描述。在postgreSQL中,列类型将是serial或bigserial,以完成相同的任务。然后在插入中,去掉序列列,db引擎将为您自动递增,正如Pete的优秀链接所说。我们大多数人

您如何标记代码,顺序号1,2,3,4…n

范例

我的DeviceType查找表包含移动设备,并具有以下属性

Id
Code
Name

在MySQL中,您可以将字段(即列)描述为自动增量,当您将新闻行插入表中时,它将更新您的代码字段。我相信这对于许多(如果不是全部的话)SQL系统来说是很常见的。查看MySQL操作的描述。

在postgreSQL中,列类型将是serial或bigserial,以完成相同的任务。然后在插入中,去掉序列列,db引擎将为您自动递增,正如Pete的优秀链接所说。

我们大多数人不会构建使用id号(通常是顺序的)和附加代码(也是顺序的)的表。这没有意义

如果代码是连续的唯一编号,请删除id列并将代码作为主键

如果您可以容忍序列中的空白,您可以使用其他答案中的任何建议,也可以使用Oracle中的序列、IBM DB2中的标识或MS SQL Server中的自动增量字段

然而,如果您绝对需要避免间隙,即使在并发环境中,事情突然变得不那么简单了。本质上,您必须识别候选值,然后尝试插入它,如果并发事务在您之前插入了它,则准备重试整个过程


顺便说一句,您可以使用代码作为主键并完全删除Id吗?

您能解释一下您要做的事情吗?您是否希望每个记录的代码都是连续的、唯一的id?当然!我在考虑删除Id,因为代码是唯一的,永远不会更改,但是它会更改,那么主键将使用varchar而不是int。这是一个问题吗?代码也没有固定长度,例如IPAD和IPHONEANDROID@001在你的问题中,你说:你如何标记你的代码,顺序号1,2,3,4…n?。所以我的理解是代码是一个顺序INT,而不是VARCHAR。也许你应该编辑你的问题,让它更清楚?@001试图回答你的评论:你这里有两个关键:一个自然代码和一个代理id。保留代理和不保留代理的两种策略都有利弊,但这不是列出它们的地方。关于一些提示,请参阅我的另一个答案底部的要点:我正在考虑删除Id,因为代码是唯一的,永远不会更改,但是它会更改,那么主键将使用varchar而不是int。这是一个问题吗?此外,代码没有固定长度,即IPAD和IPHONE,android。事实上,代码是相当短的VARCHAR并不重要。如果您使用id号,则必须始终使用联接;使用代码,您将永远不需要加入。我会让代码成为主键。其他人会有其他的意见。如果决定保留id号,请确保声明代码列是唯一的。