时创建用户定义的类型,而不是使用现有类型的最佳实践的?在我的预览工作地点的所有基本类型是预定义的,是最好的做法?什么样的优势和劣势是什么它。结果非常感谢!

有帮助吗?

解决方案

在MS SQL服务器 - 的想法是伟大的。然而,有一个大的,以他们:你不能改变他们,一旦他们在使用,因为没有ALTER TYPE ....声明。这可以是一个重大麻烦。

考虑一下:你有具有用户定义类型ISBN书店应用程式= VARCHAR(10) - 就像一个魅力。现在国际委员会决定将ISBN场increate 13个字符 - 不幸的是,没有ALTER TYPE ISBNType.....所以你唯一的选择就是基本上丢弃类型的所有列在所有数据库中,在新的形式,然后再重新创建类型,并再次重新创建所有那些列。

我们的想法是伟大的,我喜欢使用它 - 但在其目前的状态,它的旁边不可用,在我看来,这是不幸的。

马克

其他提示

一个有点晚,但..我的2克拉

在用户自定义类型履行域的概念和逻辑模型的作用,所以如果你想实现在物理数据库你的逻辑数据模型,使用用户定义的类型将是最接近。这将提供益处,例如使用可以自动地转移到一实现的图形模型,比它可以在不使用UDT的来进行。

使用域使得能够检测尝试存储在一个SSN字段邮政编码并将它们通过在运行时捕获数据库(或甚至编译时间)。这将使您能够执行公司范围内的业务规则,他们应该执行:在那里的数据命中存储点。要是在别的地方是礼貌性的用户,但是这是他们绝对要强制执行,以确保没有人去他们身边。

此外,如在ANSI SQL定义的UDT:1999包封的方法,并且可以子类型。这意味着,在业务规则与约束的处理某些变化可以在数据库中进行更改,而不必碰的实现。

...然而如当前实施的UDT很不理想了很多。我甚至不能确定SQL Server实现了标准的描述,甚至更确定的甲骨文。而且即使他们这样做,用的UDT将成为明显的马上为你使用BI工具,ETL工具或其他,而头脑简单的工具的缺点:他们通常不会明白UDT和即使他们这样做,他们不会能够使用它们,因为大多数立足于基本类型(int,炭和日期/时间)。

至于报告工具,让我们考虑具有字段的组合UDT。现在,数据库无关的ETL工具将如何能够理解的类型?它必须能够理解,以显示它,或者用它进行计算的结构。而且,对于每一个支持的数据库 - 一项艰巨的任务。而且,由于没有人使用的UDT,他们将无法做到这一点。这是一个恶性循环,但我们仍然不得不忍受它。

除此之外,在大多数数据库UDT支持是不是所有的热任一。更改类型可以是挺难的。虽然语法应该是一样的无处不在,他们的管理是未定义在SQL:1999年,因此处处不同。试着改变UDT的SQL Server中的老板的例子。这曾经是相当困难的 - 不知道有关SQL服务器2016年,但考虑到的UDT不喜欢看的一个重点领域,我不期待在这方面的重大改进。

最后,如果你真的复杂的代码添加到UDT的,你碰到你是在具有缺乏良好的调试选项的环境中编程的老问题。这并没有帮助。

所以:如果你有完全控制您的数据库和所有的互动经过你的软件的UDT可能是非常有帮助的。如果不是这样,他们可以是一个巨大的痛苦颈部。哪一个是你的方案的情况下,事只有你可以告诉。

如何凉爽是用户定义数据类型在MS SQL服务器?

就个人而言,我不使用他们,但我见过他们。一个问题是客户机代码至少只识别的基本类型,IIRC,对于MS SQL服务器。和跨版本可移植性/行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top