0

我有数据库结构,其中所有表都有两列作为主键。

例如,表 Author 有两列,例如 AutherId,它是一个自动递增的数字,而 pc_id 是该 pc 唯一的,它们是表的复合键。但是当涉及到关系时,我必须为每个关系定义两列。并且由于我打算使用 Docrtine (PHP ORM),所以这样使用它有点问题。

所以我想知道我是否可以生成一个唯一的 id(也结合 pc_id)并将其用作主键。

php 代码就像 time() 。兰德(1000,9999)。$pc_id

这样 id 是通过连接时间 + 1000 到 9999 之间的随机数和 pc_id 生成的(pc_id 也是从 1 开始的数字)。但这会产生一个需要 bigint 存储的 20 位数字(当 pc_id 为 6 位时)

有没有一个很好的选择

问候

4

3 回答 3

2

It is often considered to be a good idea to have the DB to auto generate a primary key in stead of using business information for this purpose.

Of course you can still have contraints on your business information if you want to enforce uniqueness. But this way you can avoid the problems that you have with foreign keys and such.

So i say, generate a primary key, and get a unique constraint on your business values

于 2010-04-26T09:53:49.857 回答
1

The author table only needs one primary key - AuthorId. Why would you ever have two authors with the same id? If you have a many pc to author relationship then have a separate pc table with a primary key of PcId, and a field for AuthorId.

于 2010-04-26T09:53:04.927 回答
0

您可以使用UUID作为代理键。它在所有服务器中都是全球唯一的。缺点是它是一个 36 字节的字符串,手动传递可能很笨拙。

如果你能满足条件,还有uuid_short(),它是 UUID 的 64 位整数表示,但它对如何/何时被认为是全局唯一的有特定限制,因为它丢弃了字符串 UUID 的 128 位的一半,所以它可以挤入“bigint unsigned”字段。

于 2010-04-26T16:23:36.307 回答