我有一个mysql数据库,它有3个表必须连接在一起。我收到的小型数据库必须提供这个mysql数据库,并在我得到它时附加新数据。我遇到的问题是我得到的较小的dbs是由外部应用程序生成的,并不是真正意味着一起使用。因此,当我利用较小数据库的模式时,我无法知道3个表中的所有记录是如何组合在一起的。
我正在考虑插入一个guid作为主键,我可以添加到表中并在插入所有新数据时插入。
但是,我很谨慎使用char字段(用于存储guid)作为键。这是一个有效的问题,还是使用char字段知道它总是一个足够的解决方案?有人可以推荐更好的方法吗?
谢谢
答案 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)
一般情况下,char或varchar作为主键没有问题,除非它们太长。通常整数是首选,因为它们有点快,但这取决于你是否对你很重要。
实际上,您也可以使用复合主键。一个组件可能是您的原始主键,仅在一个数据库中是唯一的。如果您能够为每个数据库分配唯一的编号,则第二个组件可以是数据库的编号。
您还可以使用以下方案:
int newId = dbNumber * 10000 + iDInSmallDb;
所以最后4位是原始数据库,其他数字是数字数据。