1

我要创建一个包含 3 列的孤立表(与任何其他表没有关系)。

  • Col1 - 字符串字段 - VARCHAR(32) - 包含不超过 32 个字符的唯一数据
  • Col2 - 字符串字段 - TEXT - 包含较大的非唯一字符数据
  • Col3 - 数字 (Bool) - INT(1) - 0/1 用于标记

我正在考虑使用 Col1 作为我的主键。我做了一些研究,看到人们认为使用无意义的 INT 列作为 PRIMARY KEY 来避免外键/存储问题是可行的方法。

但是,IMO,因为这是一个孤儿表,所以没关系。此外,无论如何我都需要在 Col1 上放置一个索引。

作为旁注,我预计此表中的行数不会超过 ~1000 行。

请思想。

4

6 回答 6

2

我仍然会使用 INT PK 并在 COL1 上放置一个索引。我想你可以使用 COL1 作为索引,如果你能确保没有任何东西被加入到那个表中,但是如果没有别的,索引会让你知道从表中添加/删除项目的顺序。我还想添加一个 IsActive 布尔值,这样您就永远不会删除任何内容,并且几乎每个表都添加一个 DateCreated 日期时间。

于 2012-04-17T17:16:17.140 回答
1

如果 col1 是您真正的主键,则没有理由不使用它。特别是如果桌子那么小。

无论如何,您都需要在该列上维护一个唯一索引,因此通过添加人工主键,您只需添加更多的插入和删除操作开销(因为必须维护两个索引)。

除非您从非常非常多的其他行(和其他表)中引用该 PK,否则您应该使用业务规则的自然主要内容。

于 2012-04-17T17:26:19.767 回答
1

我仍然不清楚问题是什么。从答案来看,我将其推断为两个似是而非的问题:

  1. 可以使用 VARCHAR 而不是 INTEGER 作为主键吗?
    • 是的,可以使用 VARCHAR 代替。
      在许多情况下,它是首选,特别是如果您的表预计将超过 2,147,483,647 条记录(是的,这种情况会发生)。在性能方面,即使 INT 具有最小的速度优势,在约 1000 条记录表上,您也不会看到它。默认情况下对指定的 PK 进行索引。一个问题是您将丢失数据库可以为您执行的任何自动生成序列。
  2. 可以使用您唯一的 COL1 字段作为主键,而不是其他一些唯一的 ID 字段吗?
    • 是的,没关系。
      拥有主键的整个概念是建立一个唯一的字段。然而,你失去的可能是一些内在的理解。当其他用户想要加入该表时,更容易理解这id是一个唯一字段,而col1(某些 varchar)可能是唯一的,也可能不是唯一的。
于 2012-04-17T17:58:27.833 回答
1

我知道你来自哪里,但无论如何索引第一列是有意义的。这可能是因为我习惯了 excel,但是主键的初始列的用处也有其顺序以及调试或捕获数据时的可读性。如果您使用更随机生成的数字,您仍然会在数百行中搜索难以区分的键。最后,我强烈推荐额外的整数列。这是非常值得的。

于 2012-04-17T17:14:47.593 回答
1

每当我做任何数据库表时,我都会保留我的 INT 列。我相信比较数字比比较字符串要快。

因此,这完全取决于您查询数据库以获取信息并比较其中的字符串的频率。

于 2012-04-17T17:14:51.757 回答
0

在您给定的情况下,应该没问题。如果范围确实变大了,那么您总是可以引入一个 auto_increment PK 列。只需确保您的字段既已编入索引又是唯一的。

于 2012-04-17T17:12:42.520 回答