guid作为主键?

时间:2010-10-29 14:57:32

标签: mysql primary-key

我有一个mysql数据库,它有3个表必须连接在一起。我收到的小型数据库必须提供这个mysql数据库,并在我得到它时附加新数据。我遇到的问题是我得到的较小的dbs是由外部应用程序生成的,并不是真正意味着一起使用。因此,当我利用较小数据库的模式时,我无法知道3个表中的所有记录是如何组合在一起的。

我正在考虑插入一个guid作为主键,我可以添加到表中并在插入所有新数据时插入。
但是,我很谨慎使用char字段(用于存储guid)作为键。这是一个有效的问题,还是使用char字段知道它总是一个足够的解决方案?有人可以推荐更好的方法吗?

谢谢

3 个答案:

答案 0 :(得分:6)

MySQL不提供GUID / UUID类型,因此您需要在用于将行插入数据库的代码中生成密钥。 char(32)char(36)(如果包含连字符)是存储GUID以代替实际GUID数据类型的最佳数据类型。

答案 1 :(得分:1)

对不起,我不是100%熟悉MYSQL,在SQL Express中,有一个唯一标识符类型,你可以设置一个真正是GUID的列。您甚至可以将其设置为自动编号,以便随机选择。

我的老板在工作HATES GUIDS,我们经常使用离线/在线系统,所以他想出了另一个系统,每个饲养数据库都分配了一个ID(称为DEPT),每当他插入主人从其中一个较小的表中,他将DEPT写入一个单独的Integer列,以便它可以轻松排序。


要实现这一点,你需要制作第二个密钥(使每个表必须在双密钥表上执行导入)。

示例:

PrimaryKey1    DEPT    Name
1              0       Slink
2              0       Fink
3              0       Werd
1              1       Slammer
2              1       Blam
1              2       Werrr
2              2       Soda

答案 2 :(得分:0)

有些DB像ms sql server提供了一个guid数据类型,我对mysql不太确定。

一般情况下,char或varchar作为主键没有问题,除非它们太长。通常整数是首选,因为它们有点快,但这取决于你是否对你很重要。

实际上,您也可以使用复合主键。一个组件可能是您的原始主键,仅在一个数据库中是唯一的。如果您能够为每个数据库分配唯一的编号,则第二个组件可以是数据库的编号。

您还可以使用以下方案:

int newId = dbNumber * 10000 + iDInSmallDb;

所以最后4位是原始数据库,其他数字是数字数据。