我想到了一個辦法,設計我的數據庫,但我想這樣做是正確的,這在我看來包括:數據庫設計 - 對象繼承
- 數據庫設計不應該有任何裁員
- 的設計本身應該設置的限制什麼是可能的,什麼是不
- 數據庫設計應該不需要任何業務邏輯實現對象的持久性
這是我現在: 我有一個設計在我的大腦,並希望運輸到MySQL(任何其他DBMS將罰款,但我不認爲這是問題)。 之後我想在數據庫體系結構之上構建一個Java應用程序。
我的問題似乎很簡單(爲簡單起見,我刪除了很多東西):
我有兩個不同的對象/表:
- 船舶
- ID
- 名
- 速度
個
- 武器
- ID
- 名
- 損害
什麼我想要做的是建立像一個高科技的樹:
- ,如果你想爲了建造船舶「Y」,那麼你必須首先研究船舶「X」。
- 如果你想使用武器「B」,那麼你必須先研究武器「A」。
- 如果你想使用武器「C」,那麼你必須首先研究武器「A」。
這將是很容易的,但現在到下一個限制:
- 如果你想建立船舶「Z」,那麼你必須要調查船「Y」和武器「B」和「武器「C」 第一
這裏是樹的可視化表示:
要表示一棵樹,我想出瞭解決方法只有一個:
創建一個名爲「實體」與領域「ID」和「表格名」新表;還要創建一個有兩個字段「id_entity」和「id_entity_prequisite」的m2m表;表中「船」和「武器」沒有一個真正的主鍵「身份證」了,而是使用一個外鍵表「實體 - > ID」
- 好:完整的樹可以表示
- 壞&醜:我需要businesslogic首先創建一個實體,使用id,然後可以創建新船或武器
還有沒有其他的(更好的是,THE)的方式來做到這一點?
也許我不太瞭解你,但我認爲你給我的第一個解決方案就是我在問題結束時提出的確切的事情。所以我認爲這個問題並沒有解決,因爲要使這個解決方案起作用,應用層必須首先在Table「Entities」中創建一個條目,並使用該ID在Tabe「Ships」或「Weapons」中創建一個新條目。 - 我認爲這是糟糕的設計。目前這是我做這件事的方式,因爲我沒有一個聰明的選擇。解決方案2可能有效,但正如你所說,這不是首選。特別是如果2表格有更多的列? –