VARCHAR列的自动规范化?

时间:2014-02-09 21:25:52

标签: sql sql-server database-design normalization

想象一下,你有很多表格都有VARCHAR(50)列,名为Country,有少量不同的国家/地区名称会重复数百万次,这里明智的做法是创建一个表格调用dbo.Country(CountryID, CountryName)并使所有表都使用外键引用保存CountryID

问题是,每当我们想要对该列执行某些操作时,我们必须使用dbo.Country加入所有查询。

但是所有连接似乎都遵循相同的模式,所以我的问题是,SQL Server可以自动执行吗?例如,我会在某个表中指定一个名为CountryName的列,该列看起来像VARCHAR但实际上存储为带有外键的CountryID,并且SQL Server可以在必要时隐式添加JOIN

SQL Server或任何其他SQL数据库中是否有这样的功能?

1 个答案:

答案 0 :(得分:0)

您无法“自动”执行此操作。但是,你有几个选择。

一种是在表格顶部创建一个自动进行连接的视图:

create view v_table as
    select t.*, c.CountryName
    from table t join
         country c
         on t.countryId = c.countryId;

或者,您可以使Country成为枚举类型。这将允许它作为字符串访问,但存储为整数。