2012-05-08 28 views
0

雙向關係我有兩個表:
1)用戶
2)場景捕獲在MySQL

它們之間

關係可以描述爲:

用戶可以具有0個或多個場景
場景必須與一個用戶相關聯

一種方法是創建User_Scenario_rels並使用用戶和場景表中的ID創建關係。但這是最佳做法嗎?這是1對多關係嗎?

回答

2

這是一個「一對多」的關係 - 一個場景有一個用戶,一個用戶有很多場景。

它通常由場景表上的「user_id」列建模。根據本領域實踐的數據庫設計,「用戶具有0個或更多場景」和「用戶具有1個或更多場景」沒有區別。從理論上講,如果你想強加一條規則,即所有用戶必須至少有一個場景,那麼你需要實現一個約束。

+0

0和1以上是否有差異? – sachin

0

一種方法是創建User_Scenario_rels並使用用戶ID和 方案表創建關係。但是,這是最好的 的做法?這是1對多關係嗎?

它是否符合您的要求並實現1:n關係取決於您是否正確地獲得了密鑰和約束。這不是唯一的方法,在這種特殊情況下,它允許一個場景在沒有用戶的情況下存在。

create table users (
    user_id integer primary key 
); 

create table scenarios (
    scenario_id integer primary key 
); 

-- Separate table allows users to have zero scenarios. 
create table user_scenarios (
    user_id integer not null references users (user_id), 
    scenario_id integer not null references scenarios (scenario_id), 
    -- This primary key lets each user have multiple scenarios 
    primary key (user_id, scenario_id), 
    -- This unique constraint allows each scenario id number to 
    -- be used only once. (So it's associated with only one user.) 
    unique (scenario_id) 
); 

這是更好(更容易),包括在場景表不可空user_id列,如內維爾K說。