复合键的替代方案

时间:2010-04-26 09:46:30

标签: php mysql primary-key composite-key

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

作为示例,表Author有两列,如AutherId,它是一个自动增量编号,pc_id是该PC唯一的那些是复合键 对于表。但是当谈到关系时,我必须为两个列定义 每一个关系。因为我计划使用Docrtine(PHP ORM),所以有点 像这样使用它会有问题。

所以我想知道我是否可以生成一个唯一的id(同样结合pc_id)并使用它 作为主键。

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

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

这个

有一个很好的选择

此致

3 个答案:

答案 0 :(得分:2)

通常认为让DB自动生成主键而不是为此目的使用业务信息是个好主意。

当然,如果您想要强制执行唯一性,您仍然可以对您的商家信息有所限制。但是这样你可以避免使用外键等问题。

所以我说,生成一个主键,并对您的业务价值获得一个独特的约束

答案 1 :(得分:1)

作者表只需要一个主键 - AuthorId。为什么你会有两个同名的作者?如果你有很多pc到作者的关系,那么就有一个单独的pc表,主键是PcId,还有一个AuthorId字段。

答案 2 :(得分:0)

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

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