如何在MySQL5中实现跨表全局唯一ID(用于注释分配)

时间:2013-03-02 20:23:09

标签: mysql sql

我有几个db-table,它们具有完全不同的字段,可用于不同类型的信息。这些表表示应用程序前端中的不同类别的数据。我想为所有这些数据集实现注释功能,无论它们属于哪个类别(db-table)。

所以我建立了一个“评论”表,其中每个条目都将作为1:n关系分配给某个数据集。当然,如果所有数据都存储在单个表中,这根本不会成为问题但是如何通过将数据存储在多个表中来解决这个问题,因为我只有每个表的唯一ID?我需要为所有表格提供某种全局ID。

我正在考虑一个特定的表(类似于“glob_id,table,id”)来分配全局唯一ID,但我一直在寻找一种方法,将表格和相应的id分配给唯一的全局id。 / p>

任何尝试,如何解决这个问题? 这是一个好方法吗? 有什么不同的方法吗?

如果可能的话,我想在数据库级别解决这个问题。

1 个答案:

答案 0 :(得分:2)

我不会走下使用GUID / UID /全球唯一标识符的道路。 相反,我会在主消息表和存储要注释的实体的单个表之间创建映射表。

注释表中的每个插入都有一个ID,然后将ID插入到映射表中,该映射表包含要注释的原始实体的ID和注释ID。

例如

<强>产品

id
name

<强> product_comments

product_id
comment_id

<强> anothertable

id
anothervalue

<强> anothertable_comments

some_id
comment_id

评论表

id
comment

我使用映射表的原因是因为您需要在每个现有表中创建一个新的全局标识符。映射表还允许多对多关系,因此有人可以将相同的注释应用于多个现有表。

修改

单一映射表:

如果有很多表要添加到您,只需创建一个映射表即可。例如:

<强> comments_table

id
comment

<强> table_map

table_name
table_id
comment_id

这样,您可以将表名和行的ID以及注释ID添加到此单个映射表中。这减少了必须插入的表的数量,但是出于性能原因必须考虑适当的索引,因为您不希望对映射表执行全表扫描。