【问题标题】:SQL how to make relationships correctly?SQL如何正确建立关系?
【发布时间】:2022-01-31 00:59:03
【问题描述】:

我在理解 sql 表关系时遇到了很多麻烦,我现在脑子里一片混乱,所以我想问几个问题。

上下文:我正在为一个基本应用程序做数据库,该应用程序允许用户遇到紧急情况并进行注册。

所以,我有我的用户表和紧急表,我想将它们关联起来,我应该问什么来弄清楚这种关系?

一个用户可以有多少紧急情况?同时?只有一个。总共?许多 有多少用户可以有紧急情况? (同时?很多用户。同一个紧急情况?只有一个。

那会是什么关系呢? 一对一:只有一个用户可以同时拥有相同的紧急情况,并且一个紧急情况只能让那个用户拥有它。

一对多:一个用户一生可以有很多突发事件,一个突发事件可以由该用户同时发生

多对多:许多用户可以同时发生紧急情况,并且许多紧急情况可以同时发生在用户身上

其中哪一个应该是我的想法?还是两者都不是? 我应该用复数还是单数来思考?

外键应该去哪里?我还不能理解。

我只用工作台 EER 模型做数据库,也许这就是我如此困惑的原因。

感谢您的宝贵时间。

【问题讨论】:

  • 我会从简单的开始获得基本的了解。也许从两张表开始:用户和紧急情况。用户可以有一个或多个紧急情况。当涉及到外键时,要知道这个引用只不过是对其他表的主键(或其他唯一引用)的引用。因此,对于这个 2 表示例,用户表的主键将是紧急情况表中的外键引用。

标签: mysql sql foreign-keys entity-relationship workbench


【解决方案1】:

诚然,这是一组非常棘手的需求,因此您在建模时遇到了问题是可以理解的。

这是一个建议的表格设计,我认为它可以支持您描述的案例。

CREATE TABLE users (
 user_id INT PRIMARY KEY
 current_emergency_id INT NULL
);

CREATE TABLE emergencies (
 emergency_id INT PRIMARY KEY,
 user_id INT NOT NULL,
 KEY (user_id, emergency_id),
 FOREIGN KEY (user_id) REFERENCES users(user_id),
);

ALTER TABLE users ADD FOREIGN KEY (user_id, current_emergency_id)
 REFERENCES emergencies (user_id, emergency_id);

这是一个循环引用,两个表中都有外键引用另一个。您不能在它引用的表存在之前定义外键,因此必须在创建两个表之后添加至少一个外键。

这种设计允许用户有很多紧急情况,因为emergencies 中的一行或多行可能引用相同的user_id 值。

它允许用户只有一个当前紧急情况,因为user.current_emergency_id 一次只能有一个给定用户的值。此列可以为空,因此也允许给定用户当前没有紧急情况,尽管他们过去有过一些紧急情况。还使用了复合键,因此外键必须引用 pair 值。我们不希望用户当前的紧急情况引用未分配给该用户的紧急情况。

这支持同时存在的许多紧急情况,只要它们被分配给不同的用户。由于每个用户最多可以引用一个紧急情况作为其当前紧急情况,并且每个用户必须引用分配给自己的紧急情况,因此当前紧急情况集合必须全部分配给不同的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多