如何在没有外键的情况下在两个表之间建立关系

问题描述 投票:0回答:2

我正在尝试做一个mysql数据库,使用xampp for linux 1.8.1。

我想在两个表A和B之间建立关系。我只在表A中创建了一个列来存储表B的id。

这是正确的吗?就没有办法强制执行吗?我的意思是,这样您就可以删除表 A 中引用的表 B 的一行。 如何防止这种情况?

mysql foreign-keys relationship
2个回答
1
投票

对我来说主要问题是如果行id被表A的一行引用,则防止删除表B的一行。

create table table_b (
  b_id integer primary key
);

create table table_a (
  b_id integer primary key references table_b (b_id)
);

insert into table_b values (1);
insert into table_a values (1);

以下语句将会失败。

delete from table_b where b_id = 1;

如果您使用 PostgreSQL 构建它,错误消息会显示

错误:表“table_b”上的更新或删除违反了表“table_a”上的外键约束“table_a_b_id_fkey”详细信息:键 (b_id)=(1) 仍然从表“table_a”引用。

该结构为您提供了两个表之间的“1 到 0 或 1”关系。对于“1 到 0 或多”,向 table_a 的主键添加一列或多列。

create table table_b (
  b_id integer primary key
);

create table table_a (
  b_id integer references table_b (b_id),
  checkout_date date not null default current_date,
  primary key (b_id, checkout_date)
);

该结构将让 table_a 为 b_id 的一个值存储多行,但每一行都必须具有不同的 checkout_date。


1
投票

我认为你总是需要一个this的主键,或者你编写一个触发器,在发生更改时检查 B 的 ID 的一致性。 我不知道如果没有触发器或约束,这是否可能......

© www.soinside.com 2019 - 2024. All rights reserved.