2011-01-12 46 views
3

眼下在數據庫中,我有一個成員表和產品表的連接收藏表由來自兩個成員產品主外鍵表。我有一個要求限制成員可以放置在他們的最愛在5的產品數量限制。數據庫設計:選擇和限制收藏

這個限制從哪裏來?它是否在數據庫(MySQL)中完成,因此將成爲我現有模式的一部分?或者這是一個編程功能,可以用PHP之類的東西來完成?

回答

3

的問題已經回答了,但是,因爲你正在尋求理解......

與數據庫的想法是,對數據的所有這樣的這種限制和約束被放置在數據庫本身(作爲一個自包含的,單元)。數據限制應該在數據庫中,而不僅僅在應用程序中。 ISO/IEC/ANSI SQL提供了多種類型的約束,爲不同的目的:

  • 外鍵約束,參照完整性(以及性能;開放式體系結構合規性等)

  • 檢查約束,要檢查的其他列的數據值,並且不允許違反

  • RULE約束,以禁止數據即外的範圍或指定確切的數據值的格式

你是一個經典的簡單規則或檢查。數據庫和數據庫設計的正確答案是RULE或CHECK,而不是代碼。

這並不是說應用程序不應檢查計數,並避免嘗試無效操作。這是很好的意義。這不是重複,而是停止更高級別的無效操作,從而節省資源使用。如果完整性是在開發人員編寫的應用程序代碼之外管理的,則不能依賴Db中的數據。服務器內實現的規則可以依賴,它們針對所有應用程序或應用程序組件實施。

但是免費軟件Non-SQLs沒有Standard-SQL的基礎知識。沒有支票或規則。因此,「數據庫」中數據的完整性完全依賴於開發人員:他們的質量,知識,一致性等。

MyNonSQL/PHP的正確答案是代碼。在嘗試插入的每個位置。

1

你會這樣做在PHP中。

只需在插入前做一個SELECT COUNT(*) FROM members_products WHERE member_id = 3

+0

太棒了,感謝您的幫助!我覺得我忽略了一些簡單的東西。 – swisscheese 2011-01-13 00:13:10

+0

不客氣。 – webbiedave 2011-01-13 00:17:56