XCode最佳实践之最佳数据类型

简介:

与其它ORM框架相比,XCode拥有最强的多数据库正向反向工程,暂时还没有发现能在这点上超于XCode的,哈哈!

但是,XCode的多数据库反向工程,也是有代价的,不同数据库的数据类型相差十万八千里,我们不可能完全支持。
所以,我们只做了常见的一些数据类型支持,但是这些已经足以满足99%的要求。

最佳数据类型如下:
1,整型。Int32是标准配置,这个必须有的。在Oracle,整型就是小数为0的Numeric
2,长整型。Int64,大部分数据库都有吧。
3,短整型。Int16,这个要小心了,似乎有些数据库不支持,不支持时XCode会自动选Int32,兄弟就不要省这点存储空间啦。
4,布尔型。Boolean,大部分数据库支持,MySql不支持,它一般用一个枚举Y/N来实现,XCode有支持。
5,浮点数。单精度Fload双精度Double,建议一律用Double,否则不同数据库很难统一,还有千万小心精度设置和小数位数,XCode反向工程可能不能把精度和小数位数完美的迁移到其它类型数据库,同类型没有问题。
6,货币。Decimal,货币类型必须有的,对应MSSQL的Money。开发的时候小心,不要拿Decimal判断两个值是否相等,应该相减判断差值是否小于0.000001,这个小数自己看情况定。
7,时间日期。DateTime,各种数据库,一律用时间日期DateTime,不支持单独的Date或Time的迁移。这个类型是XCode里面最为痛苦的一个类型,单独的Date和Time根本无法实现不同类型数据库的兼容。
8,字符串。String,在MSSQL一律用nvarchar,Unicode变长。字符串类型是唯一完整支持不同数据库设置长度的,以上类型全部不能完整支持。
9,大文本。String,在MSSQL一律用ntext。在.Net中同为String,根据不同数据库的字符串最大长度(MSSQL是4000),识别为nvarchar还是ntext。

最佳体验:
1,单一主键,建议用自增ID。XCode支持迁移自增字段的数据,当然,如果需要合并数据,那得自己处理逻辑
2,建立各种索引。

最差体验:
0,零号是最最最糟糕的,XCode不支持可空类型,所以千万不要让null和“”有不同的业务意义,各种类型的默认值代表无效数据。
1,除了字符串长度外,其它类型绝对绝对,尽可能的不要设置其它属性,包括长度、精度、小数位数,否则XCode不能实现完美迁移
2,XCode目前不支持各种数据库的外键。新增的表间关系是通过猜测得到的,规则:字段名等于另一个表名加主键名时,认为是外键
3,不要用Guid类型和二进制类型,XCode只能支持正向工程,不能支持它们的反向工程。可用nvarchar(32)替代Guid
4,字符串尽量不要用varchar/char等,因为不同数据库甚至相同数据库的不同版本,差别好大。这样省不了多少空间。
5,尽可能的不要用默认值。目前只有当前时间默认值支持好一点,newid()也有简单的支持,这块太痛苦了,也许将来不支持了。

XCode内部没有类型映射表,别乱猜测!!!
ADO.Net的架构里面有一个DataTypes的模式,XCode利用的正是它,所以,什么字段类型对应什么.Net类型,是各种数据库驱动自身说了算,不是XCode说了算,所以我们也不知道所有类型是否支持。
反正这么多年,我们占用这些类型,就已经足够了。

 

 

最后补一句:

我们只做最常见的80%日常工作,什么特别的情况,自己想办法!
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分类: X组件, XCode

本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/archive/2012/05/10/2493853.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
jenkins Unix 持续交付
个人记录jenkins编译ios过程 xcode是9.4.1
个人记录jenkins编译ios过程 xcode是9.4.1
92 2
|
6月前
|
Linux 数据安全/隐私保护 iOS开发
如何使用 Xcode 打包导出 IPA 文件并进行 iOS 应用内测,无需支付苹果开发者账号费用?
如何使用 Xcode 打包导出 IPA 文件并进行 iOS 应用内测,无需支付苹果开发者账号费用?
|
3月前
|
iOS开发 MacOS Perl
解决Xcode运行IOS报错:redefinition of module ‘Firebase‘和could not build module ‘CoreFoundation‘
解决Xcode运行IOS报错:redefinition of module ‘Firebase‘和could not build module ‘CoreFoundation‘
132 4
|
3月前
|
iOS开发 开发者
解决xcode doesn‘t support iphone’s ios 14.6 (18f72)
解决xcode doesn‘t support iphone’s ios 14.6 (18f72)
256 3
|
3月前
|
缓存 iOS开发
如何在Xcode删除某个版本的IOS模拟器
如何在Xcode删除某个版本的IOS模拟器
565 1
|
3月前
|
iOS开发
mac不通过Xcode直接打开IOS模拟器
mac不通过Xcode直接打开IOS模拟器
219 2
|
5月前
|
iOS开发
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
48 1
|
6月前
|
存储 定位技术 iOS开发
XCode8升级到Xcode9(操作系统为iOS11)后原来的工程中遇到的问题
XCode8升级到Xcode9(操作系统为iOS11)后原来的工程中遇到的问题
103 0
|
6月前
|
Linux 数据安全/隐私保护 iOS开发
Xcode8.1如何支持iOS8.0以下版本
Xcode8.1如何支持iOS8.0以下版本
43 0
|
iOS开发
iOS Xcode 意外退出 打不开工程
iOS Xcode 意外退出 打不开工程
167 0