SailsJS / Waterline - 如何使用'字符串'模型和协会中的索引?

时间:2014-09-16 13:24:49

标签: orm indexing associations sails.js waterline

新手问题。

根据https://github.com/balderdashy/waterline#indexing,您无法使用'字符串'由于不区分大小写的问题,数据类型作为Waterline中的索引:

  

目前在向字符串字段添加索引时存在问题。因为Waterline以不区分大小写的方式执行查询,所以我们无法在字符串属性上使用索引。有一些解决方法正在讨论中,但到目前为止还没有实现。这将在不久的将来更新,以完全支持字符串索引。

我关心的问题是:表现;使用' string'的关联钥匙是不可能的。

我的问题是:

  1. 如果被告知这样做,它实际上是否会对字符串进行索引?如果是这样,那么基于以下内容的索引是什么:a)原始字符串原样; b)字符串的小写字母; c)字符串的大写?
  2. 如果它根本没有对字符串编制索引,那么如果您认为“不能使用'意味着'没有创建'那么这是否意味着Waterline /数据库后端执行非索引逐个记录检索和比较?如果是这样,似乎效率很低。
  3. 是'字符串'和'文字'数据类型都受到影响或者我可以使用' text',在这种情况下,问题#2需要回答' text'数据类型也是如此。
  4. 如果你真的不能使用' string',我应该使用什么代替外键?一个整数ID和一个连接表,用于将另一个表与字符串值绑定? (似乎很浪费,但对于像关键字列表这样的东西是可行的。)
  5. 如果以及何时发出此问题'修好了吗?
  6. 正在讨论的解决方法是什么和/或在哪里?
  7. 我应该看一下更好的ORM,还是只使用本机SQL方法(仅供参考,我使用PostgreSQL)。
  8. 我希望这里的答案是: '串'可以编入索引,但查询'字符串'数据类型使用小写(或大写,但让我知道哪个)。因此,我可以有一个'字符串'只要案件正确就行了。

    另外,我假设'字符串'和'文字'在Waterline中实际上是同义词,至少在数据库的本地环境之外。

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

TL; DR:不用担心。

要点两点:

  1. 您所指的注释实际上是为了解释为什么unique属性(当前)不能正常使用字符串属性。

  2. 主要适用于MongoDB。

  3. 在Sails中创建两个模型之间的关联时,始终引用主键;当前版本的Waterline不支持指定外键字段。当Sails在Postgres数据库中创建一个表时,默认情况下它会自动为模型的主键PRIMARY KEY添加id索引,或者如果你自己在primaryKey属性中指定了哪个属性为模型设置autoPkfalse。任何列类型都会发生这种情况。您引用的问题是指字符串类型上的自定义索引。所以,一切都应该像你期望的那样使用字符串列作为Postgres中的键,包括关联。