类型系统的四种维度

类型系统概览
原文在这里: http://programming.reddit.com/info/63tnv/comments/c02qx55


Latent typing是一种你不需要在源码中的明确的声明你的变量的类型的类型系统.而与之相反的是manifest typing,它需要你在源码中明确的声明你的变量的类型。


Static typing类型系统指的是你的源码中的任何独立的表达式都必须有类型,不管它的类型是直接写在源码中,或者是通过编译器来推断.Dynamic typing是运行时的值才有类型的一种类型系统,因此在它里面程序的表达式能够有任意的类型.

overlap 是一种类型推断系统,像haskell和ocaml用的就是overlap,他们是 statically而且还是latently,他们的编译器能够推断出你的变量的类型。 理论上,这里还有另外一种overlap,它是把变量的类型写在源代码中,可是会直到运行时才会检测类型的是否正确. python3000已经被提议使用这种系统,Common Lisp 和Dylan 使用的就是这种系统.

structural subtyping意味着对象或者表达式能够基于他们的结构(比如他们的方法,变量等等)来进行比较他们的类型的兼容性.相比较而言,nominal subtyping意味着对象基于通过程序员来做的显示的子类声明来进行比较他们的类型的兼容性(比如java的接口).Haskell, ML, 和大部分的动态类型的语言是 structurally-subtyped.工业语言大多数都是nominal subtyping的.


这里还有一个strong vs. weak 类型,他们的区别是是否在运行时动态的转换变量的值 (也就是说要不要到不同的类型)的类型.


下面是类型系统的4种不同的维度:

[quote] 1Static (表达式有类型) vs. dynamic (值有类型)
2Strong (没有一个显示的强制转换,这个值的类型就不能被转换为另外的类型) vs. weak (运行时会转换值类型到合适的类型)
3Latent (没有类型声明) vs. manifest (有类型声明)
4Nominal (子类型需要被显式的声明) vs. structural (子类型是由操作可利用的的类型来进行推断的) [/quote]


下面是一些语言所属的类型系统:

[quote]Ocaml: static, strong, latent, structural typing

Haskell: static, strong, latent, structural typing, with nominal typing available via newtype and manifest typing through optional type declarations.

Erlang: dynamic, strong, latent, structural typing

Scheme: dynamic, strong, latent, structural typing, with nominal typing available in many object systems.

Common Lisp: dynamic, strong, latent or manifest typing. Same note about structural vs. nominal typing as Scheme, but nominal subtyping is used more often in practice.

Python & Ruby: dynamic, strong, latent, structural typing. Nominal subtyping is available via isinstance or Ruby equivalent, but good practice frowns upon it. PHP: dynamic, weak, latent, nominal or structural typing. Culture is much friendlier to nominal subtyping than Python or Ruby, but it's not required.

Java & C++: mostly static, strong, manifest, nominal typing. The casts give you a form of weak-typing when necessary, and C++ templates are structurally typed.

C: static, generally weak, manifest, nominal typing.

Assembly: dynamic, weak, latent, structural typing[/quote]
### 设计并创建四个维度表的最佳实践 #### 数据仓库中的维度建模原则 在构建数据仓库时,遵循良好的维度建模原则对于确保系统的可维护性性能至关重要。为了实现这一点,在详细设计之前应为数据仓库系统指定规范,这主要包括源系统、主题、业务术语、报表等方面的规划[^1]。 #### 维度表的选择与定义 当决定要建立哪些维度表时,应当考虑实际业务需求以及未来可能的变化趋势。通常情况下,会选择那些能够描述事实表中记录特征的数据作为维度字段。例如时间戳可以转换成日期维;产品编号对应到商品维等。 #### SQL Server Management Studio (SSMS) 中的具体操作指南 ##### 创建数据库对象前准备 - **确认服务器连接状态正常** - **选择目标数据库** ##### 编写 T-SQL 脚本以创建维度表结构 下面是一个简单的例子来展示如何利用T-SQL语句在一个名为`AdventureWorksDW`的数据库里创建四张典型的维度表格: ```sql USE AdventureWorksDW; GO -- 创建客户维度表 CREATE TABLE DimCustomer ( CustomerKey INT PRIMARY KEY IDENTITY(1,1), FirstName NVARCHAR(50), LastName NVARCHAR(50), EmailAddress NVARCHAR(50), Phone NVARCHAR(25) ); GO -- 创建地理位置维度表 CREATE TABLE DimGeography ( GeographyKey INT PRIMARY KEY IDENTITY(1,1), City NVARCHAR(30), StateProvinceCode CHAR(2), CountryRegionCode VARCHAR(3), PostalCode NVARCHAR(15) ); GO -- 创建产品类别维度表 CREATE TABLE DimProductCategory ( ProductCategoryKey INT PRIMARY KEY IDENTITY(1,1), CategoryName NVARCHAR(50) ); GO -- 创建销售渠道维度表 CREATE TABLE DimSalesChannel ( SalesChannelKey INT PRIMARY KEY IDENTITY(1,1), ChannelDescription NVARCHAR(50) ); GO ``` 上述脚本展示了基本框架下的维度表创建过程,其中包含了必要的约束条件(如主键)。当然,具体的应用场景可能会有所不同,因此还需要根据实际情况调整列名及类型设置。 #### 关于优化建议 考虑到查询效率等因素,在创建索引或者分区策略等方面也需要做出合理安排。比如针对频繁访问的关键字添加非聚集索引可以帮助加速检索速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值