我正在研究跟蹤特定項目價格的應用程序。這是一個很好的解決方案,可確保在這種特定情況下的數據完整性?
每個價格都有一個物品的參考,銷售該物品的企業以及該物品的銷售地點。現在,通常情況下,這會做的很好:
CREATE TABLE `price` (
`priceId` INT UNSIGNED NOT NULL AUTO_INCREMENT, -- PK
`businessId` INT UNSIGNED NOT NULL,
`itemId` INT UNSIGNED NOT NULL,
`locationId` INT UNSIGNED NOT NULL,
`figure` DECIMAL(19,2) UNSIGNED NOT NULL,
-- ...
)
但我有以下問題:
應用邏輯是這樣的,在一個位置一個企業一個項目可以有多個價格(在這一點上這並不重要),其中一個價格可以是是一個官方價格 - 一個物品不一定要有官方價格,但如果是這樣,則只能有一個。
問題是;如何對此進行建模以確保數據完整性?
我最初的想法是創建一個額外的表:
CREATE TABLE `official_price` (
`priceId` INT UNSIGNED NOT NULL -- PK + FK (references price.priceId),
-- ...
)
此表將舉行priceId:s表示價格是官方的,並且PK/UNIQUE約束會照顧「之一或「無」約束。
這似乎是一個可行的解決方案,但我仍然想知道是否有更好的方法來處理這種情況?
謝謝,我也考慮過這個。 (priceId + is_official)不起作用,因爲一個項目可以有多個價格,但是這個黑客可以使用一個唯一的組合索引(businessId + itemId + locationId + is_official)。 –
@Martin:哎呀,是的,錯過了一點。主要想法是'nulls'不被視爲重複。 – zerkms