我有数据库结构,其中所有表都有两列主键。
作为示例,表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来存储
这个
有一个很好的选择此致
答案 0 :(得分:2)
通常认为让DB自动生成主键而不是为此目的使用业务信息是个好主意。
当然,如果您想要强制执行唯一性,您仍然可以对您的商家信息有所限制。但是这样你可以避免使用外键等问题。
所以我说,生成一个主键,并对您的业务价值获得一个独特的约束
答案 1 :(得分:1)
作者表只需要一个主键 - AuthorId。为什么你会有两个同名的作者?如果你有很多pc到作者的关系,那么就有一个单独的pc表,主键是PcId,还有一个AuthorId字段。
答案 2 :(得分:0)
您可以使用UUID作为代理键。它在所有服务器上都是全球唯一的。缺点是它是一个36字节的字符串,手动传递可能很难。
如果你能满足条件,那么还有uuid_short(),它是UUID的64位整数表示,但它对如何/何时被认为是全局唯一的具有特定限制,因为它下降了一半字符串UUID的128位,因此可以挤入“bigint unsigned”字段。