2009-02-24 170 views
1

此問題是另一個問題的延續,也標題爲Entity Relationship實體關係

Dejene:你應該將這裏的材料轉換成原始問題,然後刪除這個問題。


闡述: 是, '場' 指的土地面積。我們在不同的地點有幾個甘蔗種植地。它[每個領域?]被命名並且有預算。

用戶不是指在機器上工作的個人。他們是部門。 我用'isDone'表將userDept與機器鏈接起來。一臺機器可以被多個部門使用,許多機器可以爲一個用戶部門工作。

特定的機器可以用於給定班次的多個任務。它可以工作2個小時,並可以在另一個領域開始另一項任務。 我們每天有三班倒,每組8小時!

如果我使用自動增量PK,你認爲其他密鑰是重要的嗎?我不喜歡使用它!

通常,我只在表格中使用自動增量鍵。我們如何創建涉及自動遞增鍵的關係? 謝謝你的深思熟慮的評論!

德傑

+0

從你的問題,我不清楚你想知道什麼。請將測試分成幾段。 – 2009-02-24 14:37:37

回答

1

表之間的關係( 「外鍵」)是定義的列,而不是值之間。例如:

create table machine (id identity); 
create table owner (id identity); 
create table isDone (machineId, ownerId); 

現在你可以說「isDone.machineId必須在machine表中存在」:

ALTER TABLE isDone 
    ADD CONSTRAINT machineFK 
    FOREIGN KEY (machineId) 
    REFERENCES machine (id) 
; 

這樣做,如果你嘗試插入一行到isDone數據庫將返回錯誤的影響對於machine(其中select Count(*) from machine where id = machineId返回0)中的任何地方不存在的列machineId的值。

因此,您必須將定義時間(您說什麼是有效的,什麼不是)和您操作數據庫中的數據的時間分開。

當您使用數據庫的此功能時,必須確保機器和所有者在isDone中創建新行時存在。這通常很簡單:每天都有新的班次,但沒有新的機器和部門。所以,你可以創建新的機器和部門時,他們都買/成立。使用其中之一的第一次轉變可能會在很長一段時間後發生。

至於其他鍵:自動增量列應該是您的表的主鍵(PK),而不是別的。稍後,如果您發現某些查詢執行不當,則可以在其他列上創建索引。但對於初學者來說,一個auto-inc PK列應該足夠了。這使得更容易形成外鍵約束。

例子:如果你想使用部門作爲主鍵的名稱,你可以有問題,當一個部門的更名。

此外,我建議您在設計中使用對象的真實名稱(例如,「部門」或「所有者」而不是「用戶」)。這會讓你更容易看到什麼是什麼以及當你搜索某些東西時要看的地方。