2010-01-08 76 views
0

我正在爲特許經營者設計一個數據庫。我的技術水平最好(我只是在特許經營者辦公室工作)。該數據庫必須定義商店位置和特許經營商。所以我知道我需要一個「商店」桌子和一個「特許經營者」桌子。 「商店編號」將是商店表中的主要關鍵字。一個加盟商可以擁有多家商店。我想我可以在加盟商表格中指定一個「加盟商ID」作爲主要關鍵字,以便讓加盟商加盟店面。這是我的問題:每家商店可以由多達4家加盟商擁有。所以我被困在如何定義所有這些。我不確定我可以做多個加盟商的ID,即使我可以,經常只有1或2人擁有的商店。這意味着許多空白字段。另外,當我需要查詢時,我不確定它將如何聚集在一起。任何建議最合乎邏輯的方式來做到這一點?定義表格/主鍵

+0

由於@Joelio聲明你需要什麼被稱爲連接/連接表。您實際上擁有的是商店和特許經營之間的多對多關係。 4個特許經營商的限制是你需要在另一個層面處理的事情。 – David 2010-01-08 19:19:47

回答

0

好的,所以對於商店來說,你已經有了一個有效的主鍵 - StoreNumber。所以,你「商店」表會像

Store  StoreNumber INTEGER PRIMARY KEY 
      StoreName STRING 
      ...... 

然後你有另一臺加盟商將舉行加盟商和他們的信息 - 主鍵將是FranchiseeID

Franchisee FranchiseeID INTEGER PRIMARY KEY 
      FranchiseeName STRING 
      (other fields) 

要加入這兩個,因爲你可以比單一的業主多,您需要一個店主的表,這樣的事情:

StoreOwner StoreNumber INTEGER FOREIGN KEY to "Store" 
       FranchiseeID INTEGER FOREIGN KEY to "Franchisee" 

這兩個領域的結合(StoreNumber, FranchiseeID)將是你的StoreOwner中的主鍵。

這樣,您可以擁有給定商店的任意數量的所有者。

3

您需要一個連接表,創建一個名爲franchisee_store並帶有2個id字段的表,其中1個將是商店的ID,另一個將是特許經營商的ID。

here是一個很好的例子。

0

你需要的是一個多對多的連接表。這是以第三範式完成此操作的正確方法。

例子:

franchisees: 
    farnchisee_id 
    other stuff 
stores: 
    store_id 
    other stuff 
franchisee_stores: 
    frachisee_id 
    store_id 

這是從來沒有向一般屬性陣列添加到表中,因爲可以用加入表更好地處理一個好主意。正如您已經指出的,在您的商店表中有四家加盟商會浪費空間,而這些商店的空間會更少,更重要的是,這會限制任意擁有商店的加盟商的數量。

0

我想知道如果任何人有任何想法如何在Jet/ACE數據存儲中執行「每店4加盟店」規則。當然,A2010增加了新的表級數據宏,它們可以像觸發器一樣工作,允許您爲連接表定義一個數據宏,以強制執行該業務規則。

但是在A2010之前,沒有引擎級別的方法來執行此操作 - 您必須將某些邏輯放在應用程序本身中。

我在想這樣做的一種方法是將第三列添加到您的連接表,這是一個特許經營人編號。作爲PK的一部分,它將是必需的,並且如果你把一個驗證規則就像「1和4之間」一樣。這不會自動增加,所以你必須在代碼中處理它,但它會阻止添加不符合規則的記錄。

有沒有人有任何其他方法來解決這部分問題的建議?我很想聽聽有沒有辦法用缺少觸發器和多記錄表級約束的表進行建模。儘管如此,它必須在Jet/ACE中工作才能在這裏生存。