为每个"逻辑"创建域名域

时间:2014-10-27 21:50:24

标签: sql

我有一个数据库类,教授希望我们为每种类型创建域,即使这些域最终成为其他类型的别名。例如,我们不是使用默认的DATE类型,而是根据它的日期创建自己的类型(例如,OrderDate)。

我想知道这是常见还是最佳做法。

我可以想到这种方法的一些优点和缺点。专家是它清楚地说明了域的用途,并且通常我们只比较字段,如果它们具有相同的域,并且任何其他比较是需要注意的(因为它可以将苹果与橙子进行比较)。但是作为一个骗局,这也使得使用类型更加困惑,因为我们必须引用域声明来确定列真正的类型(不是我们需要经常这样做)

1 个答案:

答案 0 :(得分:1)

这不是一种特别常见的做法。例如,多年来我一直在研究许多数据库,而且我从未在基类型上使用过这种替换。

例如,在您的示例中,订单日期可以是订单日期。但是,我可能想知道过去多久以前 - 这需要“混合”类型,因为当前日期(sysdatenow()getdate()?{{1 }}?)不是CURRENT_TIMESTAMP。或者我可能想知道订单第一次投诉或第一次投票后多久。即使转换是不可见和自动的,为什么要引入不兼容的类型?

另一个问题是不同的数据库对用户定义的数据类型的支持不同。因此,使用用户定义类型的代码可能会使代码更难以移植到不同的数据库。为什么要限制未来的选择?

对于用户定义的类型,偶尔会有一些用途 do 可能需要特定的新类型 - 可能是复杂的数字和点。在某些数据库中甚至可能存在一些情况,其中基本类型上的用户定义类型是有用的 - 例如,为了一致地表示电话号码。使用它们作为内置类型的替代品?这似乎有些过分,使代码复杂化,妨碍了一些重要的查询,并限制了未来的可移植性选项。