我有了這麼多性能的實體和客戶想要增加更多的後來還可能會刪除一些過於 他可以添加或刪除時,他想什麼是最好的方式,與實體有這麼多的性能
所以我這樣做
但現在,當我需要添加或刪除我需要改變3個表,並添加約束
- 我知道這不是一個很好的解決方案,但不知道做什麼其他
你會如何解決這個問題?
注:
屬性是超過40,並且可以是醚數字或字符串
我可能不會經常刪除屬性
編輯:什麼我忘了提及attributeValues是我需要選擇已經插入或添加新的舊值
我有了這麼多性能的實體和客戶想要增加更多的後來還可能會刪除一些過於 他可以添加或刪除時,他想什麼是最好的方式,與實體有這麼多的性能
所以我這樣做
但現在,當我需要添加或刪除我需要改變3個表,並添加約束
你會如何解決這個問題?
注:
屬性是超過40,並且可以是醚數字或字符串
我可能不會經常刪除屬性
編輯:什麼我忘了提及attributeValues是我需要選擇已經插入或添加新的舊值
現在,當我需要添加或刪除我需要改變3個表,並添加約束
沒錯。這是Entity Attribute Value設計的缺陷之一。其實;這是一個較小的陷阱;等到你必須寫一些報告或運行一個複雜的查詢。
但是,如果這是客戶需要什麼...
一般來說,EAV的設計只有在適當的時候可能的屬性值的數量很大,但實際值的數量較少。典型的例子是醫療患者記錄,患者可能出現的症狀數量非常多,但實際症狀的數量可能相對較少。
請注意,您的設計中最左邊的表是錯誤的;而不是像attribute1
,attribute2
這樣的字段,應在最左側和中間表之間存在鏈接表,從而創建多對多關係。
正如您所說的,可能的屬性值的數量很大,但實際值的數量很小。 所以沒有更好的解決方案? – Star
不是。好消息是可能有意義的報告方案的數量也相當小。它們基本上等於發票和統計分析之類的東西,兩者都可以在EAV模型中充分管理。棘手的部分是讓人們輸入正確的數據;你會很快發現這一點。 :) –
「什麼是最好」的問題不是堆棧溢出的主題 –