2011-05-05 193 views
0

我現在有3個表,關係數據庫設計用MySQL,

Users (Id, PositionId) 
MonsterInstances (Id, PositionId) 
TreasureInstances (Id, PositionId) 

和1位表。

Positions (Id, Coordinate, TypeId) 

PositionId,在我的3個表中,是我的位置表中的外鍵。

我想用一個單一的位置表,如上圖所示,正常化所有我的位置數據。我面臨的問題是我必須確定一種類型,以便在執行查詢時知道要查詢哪個表。

例如

SP -- GetObjectByPosition (positionId) 

IF TypeId = 1 
SELECT * FROM Users JOIN... WHERE PositionId = positionId 
ELSE IF TypeId = 2 
SELECT * FROM MonsterInstances JOIN... 

這對我來說似乎是不好的設計。唯一的解決辦法就是讓我有3張獨立的桌子。

UserPositions 
MonsterInstancePositions 
TreasureInstancePositions 

但是,我並不總是有興趣提取用戶,怪物或寶藏數據。有時我只想要位置ID和位置 - 這意味着三張桌子,我必須做一個工會。

有沒有更好的方法來做到這一點?

回答

1

用戶,MonsterInstances,TreasureInstances可以改寫爲單個「ObjectInstances」表,其包括類型列。然後,將工作對那些3個表單獨查詢,反而會努力反對ObjectInstances和typeid的,引用新OjbectTypes表。合理?

+0

是的,這有一定道理。 – 2011-05-05 15:40:24