假設我有2個表。廣告系列和廣告客戶。每個表都有一些字段完全相同,如下所示(這些是不是字段完整列表,我只示出了相同的):數據庫規範化 - 相同的字段,不同的表
編輯: 作爲詢問的意見,我會更多地解釋密切的關係。 每個廣告客戶都有0到多個廣告系列。 1個廣告系列恰好屬於1個廣告客戶。還有另一張桌子,我們稱之爲「優惠」。創建新優惠時,需要增加所有計數列(campaigns.monthly_count,campaigns.total_count,advertisers.monthly_count,advertisers.total_count)。限制列是計數列不能超過的特定上限。
活動
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)
廣告
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)
的問題是:是不是規範化的數據庫設計,還是有更好的方式來做事?
我在想,我一次像這樣的表:
限制
campaign_id (int)
advertiser_id (int)
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)
但這種方式所引用的列一個會總是空的,我不能使用外鍵。
或者另一種選擇可能是這樣的:
limits_campaigns
campaign_id (int)
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)
limits_advertisers
advertiser_id (int)
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)
這樣,我會寫可能很多加入的查詢但我可以使用外鍵。
是否有其他選擇,似乎更合適,如果不是這些設計哪一個最好?
P.S .:只是更具體的我正在使用MySQL InnoDB引擎。
根據我的經驗,這取決於用戶界面和型號的需求。我們對實際加速應用程序的數據庫進行了歸一化處理,因爲它刪除了許多廣泛的連接。標準化正是通常應該做的,但不是必須做的。爲自己運行測試,看看哪些性能更好,並嘗試着眼於任何可能會潛入的項目範圍,並在稍後的日期進行更改(有時是完全不可能的) – amaster
您能否更好地解釋您的情況?有必要更好地理解這些表格之間的關係。它應該是廣告系列和廣告客戶之間的一對多關係嗎?廣告客戶是否可以參與一項或多項活動,使關係成爲多對多?那些「限制」呢?廣告系列是否限制了廣告客戶的限制? – Javier
@Javier我已經更新了更多的細節問題。 –