簡體   English   中英

用三張桌子連接一對多?

[英]Connecting a one to many with three tables?

您好我正在通過在網站上工作來學習燒瓶,我遇到了一個我似乎無法弄清楚的問題。

我想嘗試制作一對多通過主鍵連接的表。 這個想法是用戶可以創建一個字符,如果類型是原始的,我可以調出原始表並根據他們的id顯示字符。

我的問題是:這是否可能,如果是這樣,我應該這樣做,還是根據誰創建角色而不是他們的身份來連接它們?

這是我想要做的事情的圖表:

這是可能的,如果是這樣,我應該這樣做,還是根據誰創建角色而不是他們的身份來連接它們?

這是可能的,您也可以根據創建者連接它們。

根據數據的類似內容以及您要實現的目標,有許多可能性。 我在下面列出3

可能性1

您可以創建一個包含所有三個連接的視圖。 如果您有一個僅在Fandom表中引用的字符記錄,那么該視圖將使Original和Dungeon表中的列為空。

對於單個記錄,這看起來有點像這樣

CharacterView
- Character.id - is not null 
- Character.creator - is not null
- Character.field1 - is not null
- Character.fieldN - is not null
- Original.id - is null
- Original.field1 - is null
- Original.fieldN - is null
- Fandom.id - is not null
- Fandom.field1 - is not null
- Fandom.fieldN - is not null
- Dungeon.id - is null
- Dungeon.field1 - is null
- Dungeon.fieldN - is null

這里的問題是,數據庫中很難強制執行約束,確保三個表中只有一個引用任何單個字符記錄。 您必須在應用程序中強制執行此約束。

可能性2

您還可以以不同方式設置表格。 如果引用字符表的所有三個表都具有相同的字段,那么您可以將它們組合到一個表中,並且具有可能值為(Original,Fandom,Dungeon)的類型字段。

Combined Table
- id 
- commonField1
- commonFieldN
- Type (possible choices: Original, Fandom, Dungeon)

可能性3

如果這些表沒有完全相同的字段,那么您可以使用多個記錄來組成一個實體。 例如

TableA
- id 
- field1
- field2
- field3

TableB
- id 
- field4
- field5
- field6

您可以使用一個表替換上面的表A和B,它們對您的Original,Fandom和Dungeon表是一個分析。 如下所示

TableC
- id
- entity_id (shared among all the records that make up one entity)
- char_id
- field_name (possible values field1, field2, ..., field6)
- value

在任何情況下,名稱等創建者的詳細信息都應該在他們自己的表中,並在所有其他表中都有引用。 不應該像目前那樣在所有表格中重復這些數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM