草庐IT

mysql - MySQL:传递关系的数据结构

coder 2023-10-06 原文

我试图设计一个数据结构,以便方便快捷地查询(删除、插入更新速度对我来说并不重要)。
问题是:传递关系,一个条目可以通过其他条目建立关系,我不想为每个可能性分别保存这些条目的关系。
意思是-->我知道entry-a与entry-b相关,也知道entry-b与entry-c相关,尽管我不清楚entry-a与entry-c相关,但我想查询它。
我认为解决办法是:
在插入、删除或更新时删除可传递部分。

Entry:
    id
    representative_id

我会将它们存储为集合,就像一组条目(不是mysql集合类型,而是数学集合,如果我的英语错了,很抱歉)。每个集合都有一个代表条目,所有集合元素都与代表元素相关。
新的插入将插入条目并将代表设置为自己。
如果新插入的条目应该连接到另一个条目,我只需将新插入条目的代表id设置为引用条目的rep.id。
将B连接到A
这无关紧要,如果我需要将它连接到非代表性条目,它将是相同的,因为集合中的每个条目都具有相同的rep.id。
将C连接到B
分离B-C:分离的项将成为一个有代表性的条目,这意味着它将与自身相关。
分离B-C并将C连接到X
删除:
如果我删除了一个非代表性条目,这是不言而喻的。但是删除rep.entry有点困难。我需要为集合选择一个新的rep.entry,并将每个集合成员的rep.id设置为新rep.entry的rep.id。
因此,删除以下内容中的a:
会导致:
你觉得这个怎么样?这是正确的方法吗?我遗漏了什么吗?我应该改进什么?
编辑:
查询:
所以,如果我想查询与某个条目相关的每个条目,我知道该条目的id:
选择*
从条目A
左连接条目b on(a.rep_id=b.rep_id)
其中a.id=:id
SELECT * FROM AlkReferencia
WHERE rep_id=(SELECT rep_id FROM AlkReferencia
    WHERE id=:id);

关于需要此功能的应用程序:
基本上,我存储的是车辆零件号(参考),一个制造商可以制造多个零件来替换另一个制造商,另一个制造商可以制造零件来替换其他制造商的零件。
参考:一个制造商对某一产品的oem编号。
交叉引用:制造商可以制造产品,其目标是从另一个制造商替换另一个产品。
我必须以某种方式连接这些参考资料,当客户搜索一个号码(不管他有什么号码)时,我可以列出一个确切的结果和替代产品。
使用上面的例子(最后一张图片):B、D和E是我们商店里可能有的不同产品。每一个都有一个制造商和一个字符串名/引用(我以前叫它数字,但它几乎可以是任何字符链)。如果我搜索B的参考号,我应该返回B作为精确结果,返回D,E作为替代。
到现在为止,一直都还不错。但我需要上传这些参考号。我不能把它们从一个一体化的数据库中迁移出来。大多数时候,当我上传从一个制造商那里得到的参考资料时(不知何故,大部分时间是手动的,但我也可以使用目录),我只得到一个列表,制造商告诉我哪个参考号码指向他的号码。
例子。:
ASAS过滤器制造商,“AS 1”过滤器具有这些交叉引用(意味着,替换这些):
GOLDEN SUPER  -->  1
ALFA ROMEO  -->  101000603000
ALFA ROMEO  -->  105000603007
ALFA ROMEO  -->  1050006040
RENAULT TRUCKS (RVI)  -->  122577600
RENAULT TRUCKS (RVI)  -->  1225961
ALFA ROMEO  -->  131559401
FRAD  -->  19.36.03/10
LANDINI  -->  1896000
MASSEY FERGUSON  -->  1851815M1
...

写下所有的as 1参考文献需要很长时间,但是有很多(~1500?)这是一个过滤器。有4000多个过滤器,我需要存储这些引用(这些只是过滤器)。我想你可以看到,我不能连接所有的东西,但我必须知道阿尔法罗密欧101000603000和105000603007是一样的,即使我只知道(作为1-->阿尔法罗密欧101000603000)和(作为1-->阿尔法罗密欧105000603007)。
这就是为什么我想把它们组合起来。每个集合成员将只连接到另一个集合成员,该集合成员具有代表成员的rep_id。当有人想(比如,管理员,当上传这些引用时)将一个新引用附加到一个集合成员时,我只是INSERT INTO References (rep_id,attached_to_originally_id,refnumber) VALUES([rep_id of the entry what I am trying to attach to],[id of the entry what I am trying to attach to], "16548752324551..");
另一件事:我不需要太担心插入、删除、更新的速度,因为这是我们系统中的一项管理任务,很少会完成。

最佳答案

现在还不清楚你想做什么,也不清楚你是否理解如何进行相关的思考和设计。但您似乎希望行满足“[id]是由成员[rep_id]命名的集合的成员”。
停止用表示和指针来思考。只需找到fill in the-(named-)blank语句(“谓词”)即可,这些语句可以说明您对应用程序情况的了解,并且可以组合起来询问您的应用程序情况。每个语句都有一个表(“relation”)。表中的列是空格的名称。表的行是使其语句为真的行。查询具有从其表的语句生成的语句。其结果的行是使其语句为真的行。(当查询有表名联接时,它的语句和表的语句。工会或他们。除了投入和不投入。哪里有条件。按select删除列对应于logical exists。)
也许您的应用程序环境是一堆带有值和指针的单元格。但是我怀疑你的单元格、指针、连接、连接和插入只是你解释和证明你的表设计的方式。您的应用程序似乎与集合或分区有关。如果您真的试图表示关系,那么您应该理解关系表表示关系。无论如何,您应该确定表语句是什么。如果您需要设计帮助或批评,请告诉我们有关您的应用程序情况的更多信息,而不是它们的表示。所有的关系表示都是由满足语句的行组成的表。
您真的需要按代表元素命名集合吗?如果我们不关心名称是什么,那么我们通常使用dbms选择的“代理”名称,通常是通过一些整数自动增量工具。对集合使用这种独立于成员身份的名称的好处是,我们不必重命名,特别是通过选择元素。

关于mysql - MySQL:传递关系的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25279928/

有关mysql - MySQL:传递关系的数据结构的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  4. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  5. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  6. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  7. ruby - Rails 关联 - 同一个类的多个 has_one 关系 - 2

    我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下

  8. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

随机推荐