表 「當事人」 不看的權利。與來自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將解決實際經理,而不僅僅是任何員工。
是你的客戶組織或個人?你的員工可以成爲客戶嗎?即使它可以,你是否在模型中需要它? –
@Damir客戶是個人。客戶和員工都與組織相關聯(組織是**方**表中的字段)。不過,這對客戶**表格提出了一個很好的觀點。客戶表中的對象實際上與我已經移動到表中的訂單有關。我還刪除了_employeeid_作爲主鍵,因爲沒有兩個主鍵的位置。我已經更新了這個問題和圖表來反映這些變化。 – Astron
@Astron,我想問一下(非題)你用哪個軟件創建這個圖表?它看起來相當漂亮... – stakx