2016-11-06 46 views
1

enter image description here我有3個表,它們在我的ER-Modell中處於十進制關係(1:1:N)。 將其轉移到SQL Server中,我需要添加另一個表,對吧? (至少通過谷歌找到這個解決方案)。 但我不太確定如何去做。三元關係 - 如何在SQL Server中對其進行編碼? +派生屬性

代碼:

create table[buyer] --1 in the relation 
(id int primary key) 

create table[payment] --1 in the relation 
(id int primary key) 

create table[product] --n in the relation 
(id int primary key,) 

create table[connecting_tab] 
(
id1 int constraint fk_buyer foreign key references buyer(id), 
id2 int constraint fk_payment foreign key references payment(id), 
id3 int constraint fk_product foreign key references product(id),  
) 

關係在潛行被描述爲 「買入」

請問這種建立在SQL Server中的tenary關係? 如何定義關係1:1:N - connected_tab與買方,付款和產品選項卡之間的關係是什麼? (1:1,1:N或N:N)

此外:派生的屬性與中間的關係符號( - > ER-Modell)分離。我是否將它寫入connected_table:

create table [connecting_tab] 
    (... 
    attr int NOT NULL --derived attribute 
) 

或者應該如何定義派生屬性?

對不起我的英語不好,不是我的第一語言。 得益於先進

回答

0

一個完全自然的方式來模擬這種似乎是:

create table purchases (
    buyer_id int constraint fk_buyer foreign key references buyer(id), 
    payment_id int constraint fk_payment foreign key references payment(id), 
    product_id constraint fk_product foreign key references product(id), 
    final_price decimal(10, 4) 
); 

雖然這款車型您的圖表,這似乎很奇怪。我更習慣於購買產品的情況,如OrderLines,這些都與OrdersOrders有關鍵鏈接到CustomersCustomers(也可能是訂單)然後綁定到Payments

這可能不是你的情況。如果某人以單一付款方式同時購買單一產品,那麼我認爲我希望「付款」屬性位於purchases表中。

+0

是「購買」 - 表的連接表嗎?我發佈的模型只是一個更大的ER模型的一小部分,買方也被描述爲「用戶」。在我的任務中,用戶可以登錄到可以購買產品的商店。 – noclue123

+0

是您的發佈代碼中的關係1:1:N關係?或者,從兩張表到connected_table的關係必須是1:1,並且我必須聲明該附加值?如果是的話,我該如何聲明它是1:1關係。或者是從2個表格1:N關係和1個表格N:M關係的關係?我需要比另一張桌子嗎? – noclue123

0

你的connecting_tab應該叫Orders,但這裏比這更多。

訂單本身很少原子;更確切地說,它通常是(至少)兩個表的一個主詳細:

create table dbo.Orders (
    Id int primary key, 
    BuyerId int foreign key references dbo.Buyers(Id) 
); 
go 
create table dbo.OrderDetails (
    OrderId int foreign key references dbo.Orders(Id), 
    ProductId int foreign key references dbo.Products(Id), 
    Price money not null, 
    Amount int not null default (1), 
    primary key (OrderId, ProductId) 
); 
go 

付款相當正交於該表,實際上。當我在亞馬遜這樣的地方購物時,通常不會放置7次訂單,而且只能從我的信用卡中取款3次。所以,除非被迫這樣做,否則我不會將訂單與付款聯繫起來。相反,我會將運行餘額列放入Payments表格中,該表格會顯示此付款當時的買方餘額,包括付款本身。

當然,這並不妨礙您將買家與付款1:N聯繫起來 - 在我工作的大多數系統中,匿名付款都是不允許的。

+0

所以我從我的教授那裏得到的任務是一所大學食堂。有一個應用程序,在那裏你可以登錄,預先訂購或告知你自己不同的東西吃。在這種關係中,我所創建的新表(訂單)是否與另一個表相關,當三元關係中的關係是一對一 - 多關係?它是一對一,一對一,多對一還是多對多,一對多和一對多? – noclue123

+0

你不是很瞭解這些東西,不是嗎?好的,每個「外鍵」指定引用(父)和引用(子)表之間的1:N關係。所以,如果我們在概念/邏輯層面上談論,'訂單'是一個孩子(1:N的N方)到'買家'。但是,它與'產品'有關的N:N,因爲一個產品可以被許多訂單引用,反之亦然。在這裏,OrderDetails表是訂單和產品之間的交叉表,但在概念上它是訂單實體的一部分。 –

+0

關於這個「三元關係」:我從來沒有看到這個詞在商業環境中使用。它太學術了,而且,整個想法在沒有提到每個人都同意的實體的秩序的情況下就會崩潰,因此單單說'N:1:N'是沒有意義的。如果你需要和你的教授說同一種語言,最好向別處問問,對不起。 –