问题标签 [lookup-tables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 给定 200 个字符串,什么是键入关系值 LUT 的好方法
我有200根弦。每个字符串与每个其他字符串都有关系(通过 0 到 1 之间的浮点数来衡量)。这种关系是双向的;即关系 A/B == 关系 B/A。这会产生 n(n-1)/2 个关系,即 19,800。
我想要做的是将这些关系存储在查找表中,以便给定任何两个单词,我可以快速找到关系值。
我正在使用 c++,所以我可能会使用 std::map 来存储 LUT。问题是,用于此目的的最佳密钥是什么。
密钥必须是唯一的,并且需要能够从两个单词中快速计算出来。
我的方法是为每个单词对创建一个唯一标识符。例如,给定单词“apple”和“orange”,然后我将它们组合在一起作为“appleorange”(字母顺序,最小在前)并将其用作键值。
这是一个好的解决方案还是有人可以提出更聪明的建议?:)
sql - SQL 中的隐式枚举类型(即符号)
我们经常将 VARCHAR 用于本质上是枚举值。我知道将它们提取到单独的查找表中并使用整数 ID 作为外键通常很聪明,但有时没有其他表正在使用它,而且我们不想要另一个 JOIN,所以我们选择将它们保留在主表。
所以,问题是,是否有一些数据库功能可以让我标记这些列,然后使用一些内部查找表来节省空间并提高我的查询性能?类似于 Postgres 的ENUMs的东西,但这不需要预先明确声明可能的值。
例如,我想做一个 INSERT:
并且'pending'
将在内部被视为整数,仅保留实际字符串的一个实例,即使多行包含相同的 value 'pending'
。
在某些编程语言(LISP、Ruby)中,类似的特性称为符号,实际上是“命名整数”。
我主要对 Postgres 和 MySQL 感兴趣,但任何其他指针也将不胜感激。
ruby-on-rails - 在 Rails 中实现查找表
我目前正在使用(或尝试使用)查找表来表示包含枚举字符串的列。我已经与我的团队进行了广泛的讨论,以确保这是我们想要去的方向,并决定追求它,但不幸的是,我们都不知道如何使用迁移将查找表绑定到列,以及是否有更改在模型/控制器/视图中进行以支持这种新行为。
我已经在谷歌上广泛搜索了这个并且没有找到这样做的好例子,所以我希望有人可以告诉我一个很好的链接到我刚刚在搜索中错过的教程,或者描述如何做到这一点。我也很想知道这是否有非官方(或官方)的 Railsy 模式。
提前致谢。
core-data - Core Data 中的查找表
核心数据不是数据库,所以我对如何在核心数据中创建、管理甚至实现查找表感到困惑。
这是一个与我的项目相关的具体示例。
员工 (1) -> (许多) 人才 (1)
该talents
表包括:
人才技能名称(字符串)
TalentSkillLevel (int)
但我不想继续输入TalentSkillName
,所以我想将此信息放入另一个单独的表/实体中。
但由于核心数据并不是真正的数据库,我对关系应该是什么样子感到困惑,或者即使查找表是否应该存储在核心数据中。
我正在考虑的一种解决方案是使用所有 TalentSkillNames 的 PLIST,然后在 Talents 实体中简单地有一个指向 PLIST 版本的数值。
谢谢。
我添加了一个图表,我相信这就是你要做的,但我不确定这是否正确。
algorithm - 反转 LUT(查找表)
我正在编写一些颜色管理代码,并且正在处理 LUT(查找表)。
我可以读取颜色配置文件 LUT 并转换我的值......但是,我该如何进行逆运算?也许,是否有一种很好的算法来生成 LUT 的“逆”?
sql - 我应该在查找表中使用代码吗
我正在使用 Orable 数据库,并且正在添加几个查找表。
一般的问题是查找表是否应该包含代码和描述并且代码是返回到主表的 FK,或者查找表是否应该只包含描述并且是返回到主表的 FK。
我在争论代码/描述对。我觉得如果我有type = Contractor
一个code = CN
存储过程应该说where type='CN'
而不是只有type=Contractor
没有代码并在存储过程中说这个:where type='Contractor'
因为如果我想显示:General Contractor
给用户而不是Contractor
. 然后我将不得不更改存储过程。我觉得我不应该这样做。(更改存储过程需要在开发中重新编译,迁移到测试,由客户端重新测试,以及迁移需要经过更改控制过程的产品,这需要两周的等待期;而修改表中的记录不需要任何这个的)
我的数据建模者只想使用描述。他的主要论点是它需要一个不必要的连接。
应该采用哪种方式?如果应该以代码/描述方式完成,我如何说服数据建模者?
谢谢!
asp.net-mvc - DropDownList 项目是否应该成为模型的一部分?
我在哲学上想解决的问题是 DropDownList 项(或实际上任何类型的选择列表项)是否应该成为模型的一部分,或者是否应该将它们硬编码到 UI 或业务层中。或者也许这是 ViewModel 的一个很好的用途?
对于某些类型的下拉列表,您显然必须使它们成为模型的一部分。例如,模型必须生成与客户关联的订单 ID 的下拉列表。
我称之为“查找”数据的其他类型对我来说不太清楚。例如,性别。为什么要强制往返查找用 2 个项目填充字段?也许这是过早的优化,但是如果您有 50 个字段,那么为了填充一个页面就需要进行很多往返。当然,缓存在那里可能会派上用场,但看起来很笨拙。
我还担心将所有这些查找列表添加到模型中会造成不必要的混乱。特别是如果你有很多。
也可以选择不是在 UI 中进行硬编码,而是在业务层进行硬编码。甚至可能创建一个除了填充这些数据之外什么都不做的类。
如果答案是,您仍然应该让它们成为数据模型的一部分,那么问题是您的数据模型是否应该为每组查找字段提供不同的表。如果您的数据模型有 200 或 300 个这样的字段,那就是 200 或 300 个表,这确实使维护您的数据模型更加复杂。
不久前我问了一个关于有一个通用查找表的问题,大家一致认为这是一个坏主意。但是对于有很多领域的数据量很大的应用程序,我发现自己很怀疑。
现在,我知道你们中的许多人会说“这取决于”,但我正在寻找一种“一般”的答案。一般来说,这里的经验法则是什么?
c++ - 在哪里放置编译时常量数组?
假设我有一个存储前 10 个素数的数组,如下所示:
只要我有 1 个 .cpp 文件,这一切都非常简单。但是,如果我有多个 .cpp 文件,我真的不知道将这个数组放在哪里。
一个明显的解决方案是:
但是,这样做的问题是素数数组不再是编译时间常数。假设 x.cpp 想要进行一些涉及素数 [k] 的繁重计算,使用 ka 编译时间常数,它必须进行实际的内存查找。我不喜欢那样。
那么我应该把这个数组放在哪里,以便:
- 它在二进制文件中只有一次(不是每个 .cpp 文件一次)
- array[SOME_CONSTANT] 也是一个编译时常量
编辑
这个怎么样?
PS:即使是上面的“明显解决方案”也花了我相当长的时间来写。显然 const 变量默认具有内部链接,因此我必须在 primes.cpp 文件中添加“extern”以使其工作。
database - 使用 Access/SQL 中的查找表匹配配对值
这可能是一场噩梦。
假设我在两个不同的表中有两行数据,每行包含一个字符。A是Row1,B是Table1中的Row2,在Table2中颠倒过来。B 是第 1 行,A 是第 2 行。
我还有第三个表,其中包含三列。前两个是要连接的列,第三个是结果值,具体取决于前两列中连接的内容。
本质上,我要做的是尝试通过使用 Table3 中的关联值从 Table1 和 Table2 中找到评分最高的对。
因为匹配表 1+2 中的 A 和匹配表 1+2 中的 B。相反,我忘记了只是漫无目的地加入表格,而是得到了这个:
但是,我得到了所有可能的配对,这是行不通的。这里的问题是我不能在 Table1+2 之间进行直接 JOIN,因为 Table1 中的值可能与 Table2 不匹配,例如......
表 1 中的第 1 行和第 2 行是 A、B,表 2 中的第 1 行和第 2 行是 B、C。如果我直接 JOIN,值 A 和 C 将不会相互对齐,只剩下 B 对。
不过,我想到了另一个问题!在尝试使用子查询时,子查询将不断地重新运行......这意味着以前选择的行将在下一次再次被抓取,从而导致不正确的值。
例如,对于 A,B 和 B,C... 我希望通过子查询返回它:
当然,除非有办法取消某行再次使用的资格。有什么建议或想法吗?我正在使用 Access,但我确信这些概念适用于任何数据库解决方案。
java - 休眠快速查找表中唯一字符串的方法
我有一个包含一系列唯一字符串的表,我需要提供快速查找(除了内存缓存)。
最初我有stringId
变量 as ,但事实证明,在通过字符串 id 检索对象时@Id
,某些数据库(例如,oracle)进入了;full table scan
因此我改用 long 。
如何UniqueString
从字符串中快速访问对象stringId
。到目前为止,我看到了两种解决方案:
- 再次,注释
stringId
并@id
尝试找到解决full table scans
某些数据库中出现的原因 - 将字符串散列成 a
long
(同时失去精度)并使用查找表返回与散列匹配的所有对象,然后比较它们的stringId
属性是否相等以找到我们正在寻找的匹配,例如:
.
意见、建议?
[编辑]好的,我意识到我上面的表格插图可以简单地标准化为
这一切都不同,因为我怀疑以下两个查询的执行大致相同:
from UniqueString where hash='123'
from UniqueString where stringId='abc'