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 / 问题

问题[referential-integrity](dba)

Martin Hope
sandeep b j
Asked: 2021-06-04 18:37:46 +0800 CST

想要设置 3 个表之间的关系(第一个子表列值取决于另外两个表列之间)

  • 0

我将 Visual Basic 与 Microsoft SQL Server 数据库一起用于我的 WinForms 应用程序。

我有 3 张桌子 - 购买、销售、交易(用于付款/收据)

在 Transactions 表中,我使用 Purchase Table 的 RowId 或 Sales Table 的 RowId 作为参考来确定付款属于哪个购买/销售记录。

现在在 Transaction 表中输入记录后,如果 Transactions 表记录中使用了 RowId,我不想让Delete Purchase/Sale 条目。

我尝试过的是采购和销售表的行 ID 都是唯一值,因此创建了 1 个名为 PurchaseSaleIds 的视图,其中两个表的联合值,现在我将 PurchaseSaleIds 作为主键表(视图)和事务作为外键表,但它不是SQL Server 允许在视图和表之间设置外键关系。

Table Purchases 有 BillID 主键列,Table Invoices 有 InvID 主键列,在 Transaction 表下我有 AgainstBillId 列,它将存储 BillID 或 InvID 之间的 ID 号。

sql-server referential-integrity
  • 2 个回答
  • 32 Views
Martin Hope
Narann
Asked: 2018-02-04 06:18:55 +0800 CST

条件表参考

  • 2

我有一张桌子tree:

+------+-------+
| id   | name  |
+------+-------+
| 0    | tree1 |
| 1    | tree2 |
| 2    | tree3 |
| 3    | tree4 |
+------+-------+

一张桌子pen:

+------+------+
| id   | name |
+------+------+
| 0    | pen1 |
| 1    | pen2 |
| 2    | pen3 |
| 3    | pen4 |
+------+------+

第三个表task将任务“附加”到树或笔:

+------+------+-------+
| type | id   | name  |
+------+------+-------+
| 0    | 1    | foo   |
| 0    | 2    | bar   |
| 1    | 1    | fee   |
| 1    | 2    | beer  |
+------+------+-------+

当type为 0 时,表示id引用 a tree。当type为 1 时,它引用 a pen(以此类推许多不同的表)。

我怎样才能做到这一点并确保参照完整性?

postgresql referential-integrity
  • 2 个回答
  • 1017 Views
Martin Hope
DandyCC
Asked: 2016-07-31 14:03:38 +0800 CST

数据库设计。在不丢失参照完整性的情况下跟踪历史

  • 2

为简单起见,假设我们有这两个表:

CREATE TABLE `tbl_companies` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `tbl_workers` (
  `id` int(11) NOT NULL,
  `name` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

还有2张表用来存储公司和工人之间的关系

CREATE TABLE `tbl_companies_workers` (
  `company_id` int(11) NOT NULL,
  `worker_id` int(11) NOT NULL,
  PRIMARY KEY (`company_id `, `worker_id `)
);

CREATE TABLE `tbl_companies_workers_history` (
  `company_id` int(11) NOT NULL,
  `worker_id` int(11) NOT NULL,
  `start` date NOT NULL,
  `end` date DEFAULT NULL,
  PRIMARY KEY (`company_id `, `worker_id `)
)

使用此架构,可以轻松显示类似以下内容:“John Smith 从 2010 年到 2012 年在 MyComp 工作”。但是,如果从 de DB 中删除 MyComp,则该信息也会被删除。即使公司被删除,我也希望能够显示相同的信息。

是否有可能在不失去参照完整性的情况下实现这一目标?最好的方法是什么?我一直在寻找一些信息,我找到了 this和this,但我仍然不清楚。

提前致谢。

database-design referential-integrity
  • 2 个回答
  • 854 Views
Martin Hope
Tyler Daniels
Asked: 2014-03-28 11:22:55 +0800 CST

解决引用关系中的循环引用

  • 1

我正在设计一个小型 SQL Server Compact Edition 数据库,并试图强制执行参照完整性。该数据库是用作帐户/密码管理器的小型桌面应用程序的简单后端。

这是我的关系:

在此处输入图像描述

现在,我正在尝试设置 CASCADE 删除规则,如下所示:

category.id ---> account.category_id
account.id ---> credential.account_id
category.id ---> field.category_id
field.id ---> credential.field_id

添加前 3 个关系后,我在添加第 4 个(字段 ---> 凭据)时出错:

引用关系将导致不允许的循环引用。

我正在努力确定为什么会发生这种情况以及如何解决它。有任何想法吗?

database-design referential-integrity
  • 1 个回答
  • 797 Views
Martin Hope
user2558461
Asked: 2013-11-12 05:32:28 +0800 CST

SQL - 参照完整性

  • 1

似乎我的问题几乎描述了 GC(垃圾收集器),但我不想让一个过程每 X 次运行一次。所以这是我的问题:
我有三个或更多表,将它们称为 A、B、C。C 包含一些列,A 和 B 引用这些列。
可以删除 A 和 B 数据 -> 我的问题来了:
我希望在没有对 C 的有效引用时引用,引用的行将被删除,因为它没有被使用。我想到了给C加一个auto_increment,让A&B引用索引,只保留多个相同的数据,删除attached即可。这似乎不是最合理的解决方案。如果有人能指出我的问题,那就太好了。
谢谢你。

编辑:我正在使用 SQLite。

sqlite referential-integrity
  • 1 个回答
  • 207 Views
Martin Hope
jsedano
Asked: 2013-05-10 17:14:25 +0800 CST

当一个数据依赖于另一个数据而第二个数据具有重复值时的表设计

  • 4

我有一个产品和子产品。

喜欢:

产品标识符 - 产品名称 - 子产品标识符 - 子产品名称
                 1 个 ProA 1 个 SubProA1
                 1 专业 A 2 亚专业 A2
                 1 专业 A 3 亚专业 A3
                 2 ProB 1 子 ProB1
                 2 ProB 2 子 ProB2
                 2 ProB 3 SubProB3
                 3 过程 1 子过程 1
                 3 过程 2 子过程 2
                 3 ProC 3 SubProC3

如您所见,子产品标识符不是唯一的。我的输入是产品和子产品,我需要返回名称。

我这样做了:

表格产品:ID、名称

表子产品:IDproduct、IDsubProduct、名称

但我知道那是错误的,我想制作 3 个表,产品,子产品以及两者之间的关系,但我不知道如何设计。

如果我要将产品和子产品保存到另一个表中,我将不得不保存这两个值,该表必须具有 productID 和 subproductID 列,这就是为什么我觉得拥有一个关系产品子产品表是最好的。

但我很难做到。

database-design referential-integrity
  • 2 个回答
  • 118 Views
Martin Hope
Apocatastasis
Asked: 2013-04-26 09:56:31 +0800 CST

加强间接关系

  • 0

给定以下结构 在此处输入图像描述 有一种方法可以强制 Table1.id3 只能设置为 Table4.id3 中的值,其中 Table4.id2 = Table1.id2?最初我想在 CHECK 约束中,但不允许子查询。

sql-server-2008 referential-integrity
  • 2 个回答
  • 193 Views
Martin Hope
user20459
Asked: 2013-03-12 10:20:38 +0800 CST

如何从 MySQL 读取此输出?

  • 2

正在运行的查询:

INSERT INTO `log_url` (`url_id`, `visitor_id`, `visit_time`) VALUES (?, ?, ?)

抛出的错误:

SQLSTATE [23000]:违反完整性约束:1062 键 1 的重复条目“41721”

41721落在什么地方?我怎么读这个?如何检查“密钥 1”?

mysql referential-integrity
  • 1 个回答
  • 62 Views
Martin Hope
Joseph Caruana
Asked: 2012-11-19 09:38:59 +0800 CST

引用完整性 - 重用表

  • 2

这是我面临的设计问题的简化示例:我有 3 个表:Car,Ship和Bicycle。我需要添加一个“活动日志记录”表来记录用户操作,例如删除和用户评论等。我正在考虑只创建一个表。而不是 3 张桌子。问题在于确保参照完整性。我应该创建 3 个单独的列来链接到这些表吗?是否应该只有一列,我在需要时使用它?在这种情况下,一般建议是什么?还是我应该只创建 3 个单独的表?

database-design referential-integrity
  • 2 个回答
  • 100 Views
Martin Hope
maple_shaft
Asked: 2012-07-14 09:58:28 +0800 CST

帮助模仿体育联盟的良好 RDBMS 事务模式设计

  • 5

我需要为典型的 RDBMS 设计一个数据模型,以模仿典型体育联盟的结构。在架构上我的要求是:

  • 良好归一化

  • 事务性的

  • 应用程序开发人员可以使用流行的 ORM 工具对其进行相当好的建模

所需模式的属性:

  • 可以有很多联赛。

  • 一个联盟中可能存在 1 个或多个分区。

  • 一个部门中可能存在 1 个或多个会议。

  • 一个会议中可能存在 1 个或多个团队。

  • 当且仅当该分区未被划分为联盟时,一个分区中可能存在 1 个或多个团队(换句话说,一个分区不需要拆分为联盟,而是一个团队可以直接引用单个分区而不是会议)

  • 一个团队中可能存在 1 个或多个玩家。

  • Players存在于 1 个且仅 1 个Team中。

如果联盟结构是严格的,这将很容易做到并保持参考完整性。这就是我的想法,但我想知道这是否是一个好的设计,或者是否有更好的方法来应对这种情况。

  • 联赛表:...

  • LeagueGroup 表:FK - LeagueId NOT NULL,FK - LeagueGroupParentId NULLABLE,LeagueGroupType

  • 球队:FK - LeagueGroupId NOT NULL

  • 玩家:FK - TeamId NOT NULL

所以基本上我在想 Divisions 和 Conferences 将是同一张表,带有一个向上查找其分组父项的自引用外键。这样做的好处是联赛分组其实可以N深。

缺点是这在 ORM 框架中映射可能不是很容易或有用。此外,应用程序开发人员可能需要编写一些逻辑来将其构建到对他们的目的有用的树状对象结构中。更进一步,如果没有某种触发器,我不知道如何从数据库级别强制团队不能同时存在于分区和会议级别。

您对这种方法有何看法,您是否看到任何可行的替代方法?

database-design referential-integrity
  • 2 个回答
  • 1001 Views

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