【问题标题】:Data modeling for tags with synonym tags on an SQL databaseSQL 数据库上具有同义词标签的标签的数据建模
【发布时间】:2016-09-19 22:02:30
【问题描述】:

我想构建一个在 SQL 中定义数据模型的标记系统。 我会像 SE 一样标记帖子。

我需要的是标签同义词。

以下哪项/s 可以允许将来扩展具有同义词的标签集?如果没有或有更好的方法,那是什么?

我目前有这三个想法。

1。第一个只有一个表tags,它将所有标签和同义词标签保存在数据库中的一个表中,并具有以下字段,(简而言之,我只输入了几列必要的,并且有一个伪代码不是有效的 SQL):

标签表:

id(Primary Key) tag_id label synonym_id(References tags.tag_id, on this table)

2。第二个,有两个表如下:

标签表:

id(PK) label

tag_synonyms 表:

id(PK) label synonym_id(References tags.id)

3。第三,又是两张表,一张用于标签,一张用于同一标签表本身的标签关系:

标签表:

id(PK) label

tag_to_synonym 表:

id(PK) tag_id(References tags.id) synonym_id(References tags.id)

【问题讨论】:

  • 我更喜欢第一个...如果您提前知道所有标签和同义词,第二个会更好。但在现实生活中,我假设您从一些标签开始,然后您会发现其中一些是同义词,并且您将其中一个声明为前导标签。只需在同义词行中设置一个指向其主标签的引用,就是这样......
  • 此外,当确定标签x 是标签y 的同义词时,标签x 的所有同义词将成为标签y 的同义词。实施起来会很酷,我会努力做到的。

标签: sql database tags data-modeling


【解决方案1】:

不确定第二个选项是否会按预期正常工作,但正确的答案是(因为生活中有很多事情)取决于:)

如果您的数据库是普通的关系数据库(例如 MySQL、Postgres 等),则第三个数据库更加规范化,因此如果您创建一些索引,应该可以更好地扩展并且性能相对较好。但如果您只有几条记录(例如少于 100 万条记录),我会使用选项一,因为它更简单。

但是,如果您打算将其扩展到数百万行,则应考虑使用像 Mongo 这样的非 SQL 数据库,因为对于这种特殊情况,它会更好地扩展和更快。不幸的是,这需要对数据模型的思维方式有所改变。

【讨论】:

  • 这似乎或多或少像是一个固执己见的答案。 SQL 数据库实际上可以水平扩展。
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
相关资源
最近更新 更多