簡體   English   中英

SQL 如何正確建立關系?

[英]SQL how to make relationships correctly?

我在理解 sql 表關系時遇到了很多麻煩,我現在腦子里一片混亂,所以我想問幾個問題。

背景:我正在為一個基本應用程序做數據庫,該應用程序允許用戶遇到緊急情況並進行注冊。

所以,我有我的用戶表和緊急表,我想把它們聯系起來,我應該問什么來弄清楚這種關系?

一個用戶可以有多少緊急情況? 同時? 只有一個。 總共? many 有多少用戶可以有緊急情況? (同時?很多用戶。同一個緊急情況?只有一個。

那么會是怎樣的關系呢? 一對一:只有一個用戶可以同時擁有相同的緊急情況,並且一個緊急情況只能讓那個用戶擁有它。

一對多:一個用戶一生可以有很多突發事件,一個突發事件可以由該用戶同時發生

多對多:許多用戶可以同時發生緊急情況,並且許多緊急情況可以同時發生在用戶身上

其中哪一個應該是我的想法? 還是兩者都不是? 我應該用復數還是單數思考?

外鍵應該在哪里 go? 我還不能理解。

我只用工作台 EER 模型做數據庫,也許這就是我如此困惑的原因。

感謝您的時間。

誠然,這是一組非常棘手的需求,因此您在建模時遇到了麻煩是可以理解的。

這是一個建議的表格設計,我認為它可以支持您描述的案例。

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一次只能有一個給定用戶的值。 此列可以為空,因此也允許給定用戶當前沒有緊急情況,盡管他們過去有過一些緊急情況。 還使用了復合鍵,因此外鍵必須引用這值。 我們不希望用戶當前的緊急情況引用未分配給該用戶的緊急情況。

這支持同時存在的許多緊急情況,只要它們被分配給不同的用戶。 由於每個用戶最多可以引用一個緊急情況作為其當前緊急情況,並且每個用戶必須引用分配給自己的緊急情況,因此當前緊急情況集合必須全部分配給不同的用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM