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 / 问题 / 284593
Accepted
Mister Equis
Mister Equis
Asked: 2021-02-04 03:05:26 +0800 CST2021-02-04 03:05:26 +0800 CST 2021-02-04 03:05:26 +0800 CST

当前或一段时间内表之间的基数?

  • 772

我对两张表之间的基数有疑问。我不知道如何处理它。

想象一下:

有组:第 1 组、第 2 组、第 3 组等

一个组可以有多个项目,这些项目只能在其中一个组中。一家商店只能有一组商品,并且一次可以在一个商店中拥有一组商品,因此您可以说一家商店拥有一组。像这样,group 和 store 的基数是 1:1。但是,随着时间的推移,商店之间的组会发生变化,因此每个 stroe 都会改变它拥有的组,但组不会在商店之间重复。所以,商店会不时地交换组。

问题是我不确定它是否仍然是 1:1 或者它可以被视为 1:N,如果您认为它是长期的事情,如果我想注册更改日期,更是如此.

而且,这整个事情导致了一种三元关系,因为商店可以销售同时在一个组中的多个项目,并且只能在一组项目中,但是这个组一次只有一个商店拥有,但是,这家商店会随着时间的推移交换组。所以这让我的头爆炸。

relations
  • 1 1 个回答
  • 40 Views

1 个回答

  • Voted
  1. Best Answer
    David Spillett
    2021-02-04T03:27:47+08:002021-02-04T03:27:47+08:00

    我认为您的模型中可能缺少一个实体。随着时间的推移,一个商店可以与多个组相关联,一个组可以与多个商店相关联,因此除非您只想记录当前状态而没有历史记录,否则您将拥有 N:M 关系并需要一个联结表。就像是:

    Store      StoreGroup                        Item
    =====      ==========       Group            =============
    Id   <---- StoreId          ==========       Id
               GroupId    ----> Id         <---- GroupId
               StartTime        GroupProp1       ItemProperty1
               EndTime          GroupProp2       ItemProperty2
    

    不幸的是,您可能需要在应用程序层中强制执行“一个商店一次一组”规则,或者使用触发器,我不确定 SQL 约束是否足够。

    作为直接建模随时间变化的替代方案,如果您使用的数据库支持时态表(有时称为“系统版本化”),您可以使用该功能。

    然后你可以拥有:

    Store      Group            Item
    =====      ==========       =============
    Id   <---- StoreId          Id
               Id         <---- GroupId
               GroupProp1       ItemProperty1
               GroupProp2       ItemProperty2
    

    并且一组有一个商店是通过只能在一个组的数据中拥有一个商店来强制执行的,并且每个商店一个组可以通过对 的唯一约束来强制执行Group.StoreId。但是我可能会推荐另一种方法,除非您可以保证一组一商店规则适用于未来的版本(这似乎异常地限制了我的想法),因为前一种方法更容易重构以提供更大的灵活性.

    • 1

相关问题

  • 数据库关系继承[关闭]

  • 在学校数据库中,当学生也可以是老师时,我是否需要重复数据?

  • 我怎样才能避免这种循环关系?

  • Postgres 关系声明 [关闭]

  • ISA关系

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