AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 275686
Accepted
Sean McCarthy
Sean McCarthy
Asked: 2020-09-18 15:02:02 +0800 CST2020-09-18 15:02:02 +0800 CST 2020-09-18 15:02:02 +0800 CST

同一张表中的两条记录必须以某种方式相关

  • 772

我继承了一个有点奇怪的表,它的记录必须以某种方式相互链接。在现实世界中,这两个“结构”被组合成一个更大的“结构”,所以应该有一种连接它们的方法。

我应该使用“关联表”来链接两个 ID,还是有更好的方法来处理这种事情?也许我已经回答了我自己的问题,但我想我会问是否还有其他方法......

另一种选择是删除第二条记录,同时在第一条记录中添加对第二条记录的引用作为新列。

也许这对于这个网站来说是一个荒谬的开放式问题,但我肯定不是第一个遇到这个问题的人......

谢谢,肖恩

schema table
  • 2 2 个回答
  • 917 Views

2 个回答

  • Voted
  1. Michael Kutz
    2020-09-18T15:57:05+08:002020-09-18T15:57:05+08:00

    我相信记录“这 2 个以上的项目用于制作这 1 个更大的项目”的要求称为 BOM。(材料清单)。

    我在实际中看到的唯一一组 BOM 表对每个深度使用了 1 个表。您的 BOM 只需要这两个表。

    TL;DR - 使用“关联表”。

    • 1
  2. Best Answer
    Sean McCarthy
    2020-09-19T11:03:10+08:002020-09-19T11:03:10+08:00

    我最终使用了一个自引用的多对多关联表,其中一个结构可以与同一张表中的许多其他结构相关联。

    在 Python 的 Flask-SQLAlchemy 库中,关联表是这样表示的:

    structure_structure_rel = db.Table(
    
        'structure_structure_rel',
    
        db.Column(
            'primary_structure_id', 
            INTEGER, 
            db.ForeignKey('public.structures.id', ondelete="CASCADE"), 
            primary_key=True
        ),
    
        db.Column(
            'secondary_structure_id', 
            INTEGER, 
            db.ForeignKey('public.structures.id', ondelete="CASCADE"), 
            primary_key=True
        ), 
    
        schema='public'
    )
    

    这是实际的“结构”表,在 SQLAlchemy 对象关系模型 (ORM) 中表示为一个类:

    class Structure(db.Model):
        """Create a public.structures PostgreSQL table representation 
        for use in Python Flask-SQLAlchemy
        """
    
        __tablename__ = 'structures'
        __table_args__ = {"schema": "public"}
    
        id = db.Column(INTEGER, primary_key=True)
    
        ...
    
        # Super-cool self-referential many-to-many relationship
        secondary_structure_id = db.relationship(
            'Structure', 
            secondary=structure_structure_rel,
            primaryjoin=(structure_structure_rel.c.primary_structure_id == id),
            secondaryjoin=(structure_structure_rel.c.secondary_structure_id == id),
            backref=db.backref('primary_structure_id', lazy='select'), 
            lazy='select'
        )
    

    然后我可以在 Flask-Admin 中使用这两个关系“列”(即 primary_structure_id 和 secondary_structure_id),这非常好。

    -肖恩

    • 1

相关问题

  • PostgreSQL:分离表与单个表以保留磁盘空间?

  • 错误代码 1117 列太多;表上的 MySQL 列限制

  • PostgreSQL:表的创建日期

  • 有没有制作数据库设计和原型的好工具?[关闭]

  • 我的 Web 应用程序建模架构有多错误?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve