代码之家  ›  专栏  ›  技术社区  ›  czuroski

guid作为主键?

  •  6
  • czuroski  · 技术社区  · 14 年前

    我有一个mysql数据库,其中有3个表必须连接在一起。我接收到一些较小的数据库,它们必须为这个mysql数据库提供数据,并在获取新数据时追加数据。我遇到的问题是,我得到的较小的dbs是由外部应用程序生成的,并不是真的要一起使用。因此,当我使用较小数据库的模式时,我无法知道这三个表中的所有记录是如何一起的。

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

    谢谢

    3 回复  |  直到 14 年前
        1
  •  8
  •   Ryan Tenney    14 年前

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

        2
  •  1
  •   Jrud    14 年前

    很抱歉,我对MYSQL不是百分之百熟悉,在SQL Express中,有一个唯一的标识符类型,您可以设置一个列,该列实际上是一个GUID。你甚至可以将它设置为自动编号,这样它就可以随机选择。

    不过,我的老板讨厌guid,我们经常使用离线/在线系统,所以他想出了另一个系统,在这个系统中,每个feeding数据库都被分配了一个ID(称为DEPT),每当他从一个较小的数据库插入主表时,他都会将其DEPT写入一个单独的整数列,这样就容易排序。


    要实现这一点,您需要设置第二个键(使每个表都成为必须在双键表上执行导入的表)。

    例子:

    PrimaryKey1    DEPT    Name
    1              0       Slink
    2              0       Fink
    3              0       Werd
    1              1       Slammer
    2              1       Blam
    1              2       Werrr
    2              2       Soda
    
        3
  •  0
  •   codymanix    14 年前

    一些像ms sql server这样的数据库提供了guid数据类型,我对mysql不太确定。

    您还可以有效地使用复合主键。一个组件可以是您的原始主键,它仅在一个数据库中是唯一的。第二个组件可以是数据库的编号,如果您能够为每个数据库分配一个唯一的编号。

    您还可以使用以下方案:

    int newId = dbNumber * 10000 + iDInSmallDb;
    

    最后4位是原来的数据库,其他的是数据库号。