主键(primary key)是数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
形象说法:即一个表中某一列或某些列的组合必须是唯一值且不为空。
外键(foreign key)是子表中的列(或某些列的组合)对应于父表的主键列(或某些列的组合)。
形象说法:子表中的列是父表中对应的列的子集。
根据你的提问,我认为你所说的是物理主键和逻辑主键的概念
一般所言的数据库中的主键是物理主键,他可能在系统中由数据库自动生成,比如一个32位长的随机字符串
而逻辑主键一般是用来表示一个包含确切意义的并唯一的键值,使用者可以根据逻辑主键的值清晰的了解到一些信息,但这些信息从物理主键是无法了解的
你上面的表里是打算用逻辑主键当物理主键用这样做可以,但不推荐
一般的做法,尤其在大型项目中建议使用物理主键,该主键交由数据库自动生成并使用自己的逻辑主键,需要在程序中判断自己逻辑主键的唯一性,当然如果要求不高的系统可以不做判断
优点,在数据库迁移等过程中,可最大可能的保护你数据的完整性,比如你从一个ORACLE数据库移动到SEQ SERVER数据库时,可能物理主键会存在这样或那样的问题,这时你可以选择放弃原有的物理主键,只移动数据内容并生成新的物理主键
还有点建议,在程序中使用的时候,建议使用物理主键来关联你的数据内容~
答题完毕,希望对你有所帮助
准备
首先 你得有个正常的app项目(这是必须的 extension必须依附于某个app中 当然 不这样 你也无法单独安装某个widget)
打开项目工程 选择新建一个target 在 Application Extension 中选择today exntension 然后填入名字 确认即可
这时你的项目里多个一个target 同时也多了下面
接下来 删掉这个讨厌的 MainInterfacestoryboard 然后修改plist文件中的 NSExtension 字段
删掉 NSExtensionMainStoryboard 字段
添加 NSExtensionPrincipalClass 字段 并设为TodayViewController (你也可以指定其他的ViewController)
修改完以后 Widget就可以开始编译运行了
运行
关于调试Widget 我推荐使用模拟器而不用真机 因为在研究过程中我发现真机调试的效果非常差 经常提示无法连接到手机(也有可能是5S的性能够不) 导致无法正常的debug 或者无法reinstall 而模拟器则好点(至少能顺利的打印出log) 但是每次修改好代码以后 最好都先退出模拟器 再重新编译运行 如果你退出重新运行时提示下面这个错误 不用怕 多运行两次就ok了
hibernate的配置文件里不是有主键生成策略的配置吗?可以手动指定,也可以自动生成的。
hibernate主键生成机制
1) assigned
主键由外部程序负责生成,无需Hibernate参与。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主
键生成历史状态。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史
状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持
一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
将此值加1作为主键。
这种方式可能产生的问题是:如果当前有多个实例访问同一个数据
库,那么由于各个实例各自维护主键状态,不同实例可能生成同样
的主键,从而造成主键重复异常。因此,如果同一数据库有多个实
例访问,此方式必须避免使用。
5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL
中的主键生成机制。
6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的
Sequence。
7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence
其中一种作为主键生成方式。
8) uuidhex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后
以长度32 的字符串表示)作为主键。
9) uuidstring
与uuidhex 类似,只是生成的主键未进行编码(长度16)。在某些
数据库中可能出现问题(如PostgreSQL)。
10) foreign
使用外部表的字段作为主键。
一般而言,利用uuidhex方式生成主键将提供最好的性能和数据库平台适
应性。
以上就是关于数据库的主键是怎么回事全部的内容,包括:数据库的主键是怎么回事、关于数据库主键问题、如何向数据库中插入一条记录,以及取得新插入记录的自动生成的主键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)