2011-07-31 53 views
3

下面是一個數據庫圖,我正在其中試圖確定適當的設計。以下是一些注意事項。在MySQL中正確實現超類型子類型

  • 員工/經理與客戶有關。
  • partyid是一種全球代表一個人的方式;客戶,員工,經理。它是否需要一直傳播下去?它應該是所有表格中的主鍵還是表示個人的表格?
  • 做其他的表,如計費報告憑證等表需要有自己各自的id是主鍵,例如billingid,reportingid,credentialid等?

關於實體交互的一些註釋。

  • 員工管理器(S)與它們相關聯。
  • 客戶管理器(S)和可能員工與它們相關聯。
  • 客戶員工需要上報時間開單

enter image description here

+0

是你的客戶組織或個人?你的員工可以成爲客戶嗎?即使它可以,你是否在模型中需要它? –

+0

@Damir客戶是個人。客戶和員工都與組織相關聯(組織是**方**表中的字段)。不過,這對客戶**表格提出了一個很好的觀點。客戶表中的對象實際上與我已經移動到表中的訂單有關。我還刪除了_employeeid_作爲主鍵,因爲沒有兩個主鍵的位置。我已經更新了這個問題和圖表來反映這些變化。 – Astron

+0

@Astron,我想問一下(非題)你用哪個軟件創建這個圖表?它看起來相當漂亮... – stakx

回答

1

表 「當事人」 不看的權利。與來自this other SO question的源代碼進行比較。

在這種結構中,派對號碼向下傳播,可以這麼說。它通常應該是存儲關於某人的數據的表中的主鍵或外鍵。

在您的表格「reporting」中,它看起來像主鍵不應該是'partyid'。這將允許每個員工只有一行,我認爲你不打算。 (我可能是錯的。)如果我說得對,那麼您可能會考慮在{partyid,date}上約束NOT NULL UNIQUE,並在新列'reportid'上約束PRIMARY KEY。 「旅行」和「表演」這些表格可能會引用「reportid」。 (但請繼續閱讀。)

您的圖表中有些地方的實體會獲得額外的密鑰:例如,您的公司爲其員工分配了唯一的員工ID號。沒有理論上的理由,你從這一點上不能使用'僱傭'而不是'派對'來引用僱員。但有一個實際的原因,你可能不想這樣做。它增加了連接的數量。例如,如果表格「證書」,「工具」,「證書」,「學術」和「合規性」引用employee.employid而不是employee.partyid,則不能只加入「合規性」和「派對」來獲取這個人的名字。你也必須加入「員工」。

其他表格如賬單,報告,憑證等表 是否需要具有它們各自的主鍵的ID,例如, billingid,reportingid,credentialid等?

他們需要一個主鍵;主鍵不一定是一個id號碼。如果有一個現有的自然鍵,則必須確定它並將其聲明爲UNIQUE。

表「orders」應該只有「orderid」作爲其主鍵;使用外鍵參考來識別客戶。在某些情況下,重命名列是有意義的。就客戶而言,將其關鍵'customerid'而不是'parytid'稱作是有意義的。我自己創建一個域名。

create domain PARTY_ID as integer not null; 

然後,在需要派對ID號碼的地方,我會使用域名。

create table customers (
    customerid PARTY_ID primary key references parties (partyid), 
... 

我更願意看管理員的表格。參考它可以保證manager.managerid將解決實際經理,而不僅僅是任何員工。

+0

感謝您的解釋。我根據您的建議更新了圖表,因爲它們看起來都很理想。看一看,讓我知道,如果我在軌道上。當你說**「我希望看到一張經理人名單」**時,你的意思是將**經理**表從**員工**表和PartyType類別下移出?我唯一關心的是_managers_將不再具有應用於它們的** employee **表屬性。 – Astron

+1

不,我只是指當前(可能)管理者的表格:可以以單列表格的形式存儲所有實際管理者的員工的ID號碼。該表將成爲任何需要經理ID的外鍵約束的目標。 –

相關問題