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 / 问题 / 275232
Accepted
Alpha
Alpha
Asked: 2020-09-10 04:55:15 +0800 CST2020-09-10 04:55:15 +0800 CST 2020-09-10 04:55:15 +0800 CST

是否有充分的理由创建一个额外的表来实现 1:N 关系?

  • 772

我有以下表格:

Users
_____
UserID
Data
...
Roles
_____
RoleID
Data
...
UsersRoles
_____
UserID
RoleID

Users并且Roles处于 M:N 关系中。因此,我有UsersRoles连接它们的表。

没有连接到前面提到的表,我还创建了以下表:

Invoices
_____
InvoiceID
Data
...
Items
_____
ItemID
InvoiceID
Data
...

在这种情况下,我没有创建额外的表,因为我在这里实现了 1:N 关系。我的问题是,如果我有任何理由删除InvoiceIDfromItems并创建一个InvoicesItems类似于UsersRoles连接它们的表的表,即使我不需要它。

database-design relations
  • 2 2 个回答
  • 39 Views

2 个回答

  • Voted
  1. Best Answer
    David Spillett
    2020-09-10T06:30:24+08:002020-09-10T06:30:24+08:00

    即使我不需要它。

    不,如果您添加它而不期望需要它,那么它仅用于:

    • 查询数据时增加开销
    • 添加或更新数据时增加开销
    • 使其他在数据库上工作的人感到困惑
    • 成为不一致数据和其他错误的潜在来源

    另一方面,如果您认为将来可能需要将关系变为多对多,例如,由于部分付款或退款,一个行项目出现在多张发票上,那么可能存在现在添加额外结构以节省以后的重构工作的情况,但由于上述原因,我会谨慎地从一开始就添加它,除非我非常确定很快就会需要它。

    如果您确实添加了额外的结构,但还不想让多对多成为一件事,那么您需要额外的工作来定义强制执行所需的一对多行为的约束,直到不再需要它为止。

    • 0
  2. Walter Mitty
    2020-09-11T03:41:54+08:002020-09-11T03:41:54+08:00

    少数设计师做出这种选择的原因有两个。

    • 因为他们认为这种关系在不久的将来可能会被建模为 M:N。
    • 因为关系是可选的,他们希望避免使用 NULLS。

    这些原因中的任何一个是否合理都有些主观。

    • 0

相关问题

  • 过滤索引是否有助于改进基于输入时间的查询,还是应该避免这种情况?

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

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