2010-10-29 109 views
4

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

我想插入一个GUID作为主键,我可以添加到表中并插入所有新数据时插入。
但是,我不愿意使用char字段(用于存储guid)作为关键字。这是一个有效的关注,或者正在使用char字段知道它将始终是一个足够的解决方案的指导?有人可以推荐更好的方法吗?

感谢

回答

6

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

+1

如果你不想在你的代码中生成guid,那么设置默认为UUID()!非常棒的东西谢谢你们! – 2013-05-23 16:03:40

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 
+0

我没有在mysql中看到唯一的标识符类型,但我会再次检查。我也考虑过与日期做些什么 - 可能把它转换成一个整数或者这种性质的东西。 然而,这是一个好主意,我喂养的dbs是由随机的4位数字标识的。我认为存在重复的可能性对我来说太过分了。 – czuroski 2010-10-29 15:08:15

+0

不要使用他们的4位数字,将它们分配给你自己的一个。如果必须,请取最大值(DEPT)+1,并插入所有与该号码相关的内容。 – Jrud 2010-10-29 15:09:39

0

有的像DB的MS SQL Server提供了一个GUID数据类型,我不知道有关MySQL。

一般来说,char或varchar作为主键没有问题,除非它们太长。通常整数是首选,因为它们有点快,但这取决于这对你有多大影响。

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

您还可以使用以下方案:

int newId = dbNumber * 10000 + iDInSmallDb; 

所以最后4位数字是原来的分贝,其他数字是DB号。