【问题标题】:One true Lookup table advantages vs. disadvantages [closed]一个真正的查找表优点与缺点[关闭]
【发布时间】:2014-04-23 23:03:22
【问题描述】:

所以我已经阅读了足够多的内容,知道拥有一个查找表并不是最好的方法。从性能的角度来看,这是为什么呢?考虑以下示例:

你有一个城市的学校列表。在一个给定的城市里,我可以有不止一所学校。 因此,您在两者之间有一个连接表 schoolCities。现在考虑一个企业列表。每个城市可以有不止一个企业。所以你有一个连接表businessCities。真正的问题是:如果你只使用一个城市表并为学校和企业制作一个连接表,而不是让每个学校和企业都有自己的城市表副本,为什么会如此糟糕?

【问题讨论】:

标签: database database-design


【解决方案1】:

实际上,OTLT 设计可能有一些优势(我现在真的感觉脑袋要爆炸了)。

我见过的运行良好的模型应该是这样的。

LookupId、LookupTypeId、LanguageId、Description(显示的数据)

然后你在存储过程中的参数。将只是 typeid (获取所有类型)。如果您只需要转换特定类型的 Id,则只需传递 LookupId。将设置默认语言(在我们的例子中,它是英语)。这是一种以多语言格式显示网站显示数据的好方法。

我们实际上使用了 Match.com,并且每天在它上支持数百万用户非常好。我们实际上只是在网络启动时缓存了查找。这是一个非常有效的系统。最大的优势是我们可以直接将数据推送到生产环境,而不是添加/更改大表模式。

在我看来,只要您只处理小的下拉数据等(典型的应用程序显示内容),它就可以在性能、维护和易于添加新内容方面提供很大的优势类型。

我知道这是一种不受欢迎的方法。但是,它在正确的场景中运行良好,如果您对它的使用受到限制且有纪律。

只有我的 2 美分。我敢肯定,我会因为在这个话题上采取不受欢迎的立场而被扣分。

【讨论】:

  • 我完全同意。在某些情况下,没有相互依赖关系,它只是一个“愚蠢的值列表”,与效率优势相比,我认为没有太大的缺点。
  • 我实际上是在使用 ASP.Net MVC 尝试这个模型。问题是对于纯 CRUD 数据,我有太多的控制器和视图。我宁愿将它们全部存放在一张表中,并有一个上下文来区分。如果上下文类型增长并与代码中的复杂业务逻辑耦合,那么它可以(并且应该)轻松地导出到具有自己的控制器和视图的自己的表中。但是对于其他 20 个实际上只是分类项目的上下文......
【解决方案2】:

您所描述的不是“一个真正的查找表”;您示例中的 Cities 表听起来是一个很好的规范化想法。 “一个真正的查找表”会更像

CREATE TABLE TheOne (
    LookupType varchar(20) NOT NULL -- City, color, shoe size...?
    , LookupValue varchar(1000) NOT NULL -- how big does it have to be?
    , CONSTRAINT pk_TheOne PRIMARY KEY (LookupType, LookupValue)
)

你可能有价值观:

'City', 'Philadelphia'
'City', 'St. Petersburg'
'City', 'Paris'
'State', 'Pennsylvania'
'State', 'Florida'
'Country', 'United States'
'Country', 'France'
'Brand', 'Lucky'
'Brand', 'Diesel'
'Brand', 'Old Navy'

等等。纯粹的邪恶。

Cities 表可能会将城市与州或其他父地理区域相关联,因为可能有许多不同的城市具有相同的名称(Paris、Lima、Levittown 等)。

【讨论】:

  • 你能给我一个真正的查找表的描述吗?
  • 您应该有一个自动生成的主键 bigint 或 guid,它对所有值都是自动的。然后,您可以将表扩展为具有 int1、int2、int3 等。在 City 的上下文中,int1 是州的 pkId,它将引用同一个表并解析为自动生成的 bigint/guid。在状态方面,int1 是 Country 的 pkId,它将引用同一个表并解析为自动生成的 bigint/guid ...等等。我认为这可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
相关资源
最近更新 更多