簡體   English   中英

如何將一張桌子與另一張桌子聯系起來以備將來記錄

[英]how relate one table to another for future records

我有一個游戲表,其中包含有關游戲的數據。 然后是另一個表,其中包含有關新聞的數據。

到現在為止還挺好。

首先,我考慮為game_news創建一個聯結表,以便將新聞與游戲相關聯。

當游戲存在時,這種方式可以按預期工作。 因此,無論何時插入新聞,我都可以使用聯結表將其與游戲相關聯。

但是,在某些情況下,有關於游戲的新聞,但游戲尚未發布且不存在。

所以我的問題是; 創建游戲記錄時,是否有辦法將這些新聞與特定游戲相關聯。

做這個的最好方式是什么? 有任何想法嗎?

您有3個選項-1是在“游戲”表上設置一個標志,以說明是否發布,如果游戲未發布,則僅顯示名稱(甚至不顯示該名稱)。

另一種是在添加游戲項目並鏈接之后編輯新聞項目。 因為您無法在添加游戲之前就知道唯一的ID。

第三個UNRECOMMENDED選項是通過游戲名稱而不是主鍵鏈接它們,因此您在新聞表中有一列名為game_name的列,並以此方式鏈接了表。 但是,如果您拼寫錯誤,那將失敗,並且遠不及選項1或2好。

連接表是必經之路。 如果新聞報道涉及多個游戲,那么您就需要它。 要處理尚不存在的游戲,只需為其插入一行,包括您當前已知的所有信息(可能來自新聞),並在狀態欄中將其標記為尚未發布。 您可以將此游戲顯示為尚未發布或謠言等。

設置表是這樣的:

Games
GameID           int          not null auto increment PK
GameStatus       char(1)      not null "P"=published, "N"=not released yet, "R"=game is only a rumor
GameReleaseDate  date         null
GameName         varchar(...) not null
GameDescription...
...

News
NewsID      int               not null auto increment PK
NewsTitle   varchar(...)      not null
...

GameNews
GameNewsID  int auto increment PK
GameID      int FK to Games.GameID
NewsID      int FK to News.NewsID

通過此設置,您可以擁有與單個新聞項相關的多個游戲。 只需插入所有適當的GameNews行,即可將每個游戲鏈接到News行。

如果尚未發布游戲,則仍可以通過創建狀態為“ N”或“ R”(或類似名稱)的“游戲”行並使用GameNews表來將其鏈接到新聞,就像發布游戲一樣。 您可以使用盡可能多的信息填充“游戲”中的所有字段,並在發現更多信息時對其進行更新。 最后,您將在“游戲”行中擁有完整的游戲信息(在游戲發布后),即使它只是新聞中的謠言,它也將鏈接到所有“新聞”行。

為了讓您大致了解我在說什么,以下是“謠言”游戲的數據隨時間變化的示例(這是一個簡化的示例,每個“新聞”行沒有多個“游戲”):

data as of 1/1/2010
    Games    GameID  GameStatus  GameReleaseDate  GameName
             1234    "R"         1/1/2012         "God of War 4"
    News     NewsID  NewsTitle
             543     "Future Of Games"
    GameNews GameNewsID  GameID  NewsID
             768         1234    543

data as of 4/1/2010
    Games    GameID  GameStatus  GameReleaseDate  GameName
             1234    "R"         1/1/2012         "God of War 4"
    News     NewsID  NewsTitle
             543     "Future Of Games"
             544     "Interview with John Hight"
    GameNews GameNewsID  GameID  NewsID
             768         1234    543
             769         1234    544

data as of 11/20/2010
    Games    GameID  GameStatus  GameReleaseDate  GameName
             1234    "N"         12/31/2011         "God of War IV"
    News     NewsID  NewsTitle
             543     "Future Of Games"
             544     "Interview with John Hight"
             545     "God of War Expected Next Year"
    GameNews GameNewsID  GameID  NewsID
             768         1234    543
             769         1234    544
             770         1234    545

data as of 8/15/2011
    Games    GameID  GameStatus  GameReleaseDate  GameName
             1234    "N"         12/01/2011         "God of War IV"
    News     NewsID  NewsTitle
             543     "Future Of Games"
             544     "Interview with John Hight"
             545     "God of War Expected Next Year"
             546     "Retailers Get Ready For New Games"
    GameNews GameNewsID  GameID  NewsID
             768         1234    543
             769         1234    544
             770         1234    545
             771         1234    546

data as of 1/1/2012
    Games    GameID  GameStatus  GameReleaseDate  GameName
             1234    "P"         12/01/2011         "God of War IV"
    News     NewsID  NewsTitle
             543     "Future Of Games"
             544     "Interview with John Hight"
             545     "God of War Expected Next Year"
             546     "Retailers Get Ready For New Games"
             547     "God of War IV Review"
    GameNews GameNewsID  GameID  NewsID
             768         1234    543
             769         1234    544
             770         1234    545
             771         1234    546
             772         1234    547

如果在2012年1月1日,如果您要查看News.NewsID = 543,那么即使News.NewsID = 543文章涉及即將“傳聞”的文章,您也會看到它鏈接到完整且經過審查的Games.GameID = 1234。版本的戰神。 所有這些操作都無需對舊的News或GameNews行進行任何更改。

最簡單的答案是從新聞到游戲都具有外鍵。 如果您要為尚不存在的游戲創建新聞,只需在游戲表中創建存根記錄。 您可以根據需要對其進行標記。 添加游戲時,只需充實此存根記錄即可。

將兩個外鍵放在聯結表中是一個好主意。 外鍵引用存在的事物。 強制執行此操作稱為“參照完整性”。 允許引用不存在的項目是通往混亂的道路。

如果您獲得有關某個尚未存在的游戲的新聞文章(在數據庫中),則基本上有兩種選擇:將游戲添加到游戲表中,然后在聯結表中添加對游戲的引用; 或者,暫時忽略商品與游戲之間的關系。

“但是,在某些情況下,有關於游戲的新聞,但是該游戲沒有發布並且不存在。”

您應該理清“存在”的含義。 如果某個東西不存在,那么沒有任何東西可以與之聯系。

如果您的業務現實包含“已存在並為公眾所知”與“已存在,但僅是私人存在而未被公眾所知”之間的區別,則您的模型應承認並拒絕該現實。

完全有可能將信息與“存在但未公開”的任何事物相關聯。 不可能將信息與不存在的任何事物相關聯。

暫無
暫無

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

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