国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

為各種產(chǎn)品類型設(shè)計具有多個參數(shù)的多功能產(chǎn)品表
P粉658954914
P粉658954914 2023-10-18 17:44:13
0
2
1046

我在表格設(shè)計方面沒有太多經(jīng)驗。我的目標是建立一個或多個滿足以下要求的產(chǎn)品表:

  • 支援多種產(chǎn)品(電視、手機、PC...)。每種產(chǎn)品都有不同的參數(shù)集,例如:

    • 手機將有顏色、尺寸、重量、作業(yè)系統(tǒng)...

    • #
    • PC 將擁有 CPU、HDD、RAM...

    • #
  • 參數(shù)集必須是動態(tài)的。您可以新增或編輯您喜歡的任何參數(shù)。

如果沒有針對每種產(chǎn)品的單獨表格,如何滿足這些要求?

P粉658954914
P粉658954914

全部回覆(2)
P粉974462439

@StoneHeart

我會一直使用 EAV 和 MVC 來到這裡。

@比爾·卡文

您在這裡提到的所有這些事情:

  • 資料驗證
  • 屬性名稱拼字驗證
  • 必填列/欄位
  • 處理依賴屬性的銷毀

在我看來,根本不屬於資料庫,因為沒有任何資料庫能夠像應用程式的程式語言那樣在適當?shù)膶蛹壣咸幚磉@些互動和需求。

在我看來,以這種方式使用資料庫就像用石頭錘釘子一樣。您可以用石頭來完成此操作,但您不應該使用更精確且專門為此類活動設(shè)計的錘子嗎?

可以透過對部分資料進行少量查詢並使用應用程式將其處理為表格佈局來解決此問題。即使您有 600GB 的產(chǎn)品數(shù)據(jù),如果您需要此表中每一行的數(shù)據(jù),也可以批量處理它。

進一步如果您想提高查詢的效能,您可以選擇某些操作,例如報告或全域文字搜尋並為其準備索引表,該索引表將儲存所需的資料並定期重新生成,假設(shè)每30 分鐘重新生成一次。

您甚至不需要擔心額外資料儲存的成本,因為它每天都變得越來越便宜。

如果您仍然關(guān)心應用程式執(zhí)行的操作的效能,您始終可以使用 Erlang、C 、Go 語言來預處理數(shù)據(jù),然後在主應用程式中進一步處理最佳化後的資料。 p>

P粉514001887

您至少有以下五個選項來對您所描述的類型層次結(jié)構(gòu)進行建模:

  • 單表繼承:一個表格適用於所有產(chǎn)品類型,有足夠的欄位儲存所有類型的所有屬性。這意味著很多列,其中大多數(shù)在任何給定行上都是 NULL。

  • 類別表繼承:一張產(chǎn)品表,儲存所有產(chǎn)品共有的屬性類型。然後每種產(chǎn)品類型一個表,儲存特定於該產(chǎn)品類型的屬性。

  • 具體表繼承:沒有通用產(chǎn)品屬性的表。相反,每種產(chǎn)品類型一張表,儲存常見產(chǎn)品屬性和產(chǎn)品特定屬性。

  • 序列化 LOB:一個產(chǎn)品表,儲存所有產(chǎn)品類型通用的屬性。一個額外的欄位以 XML、YAML、JSON 或某種其他格式儲存半結(jié)構(gòu)化資料的 BLOB。此 BLOB 可讓您儲存特定於每種產(chǎn)品類型的屬性。您可以使用奇特的設(shè)計模式來描述這一點,例如 Facade 和 Memento。但無論如何,您都無法在 SQL 中輕鬆查詢大量屬性;您必須將整個 blob 提取回應用程式並在那裡進行排序。

  • Entity-Attribute-Value:一張產(chǎn)品表,以及一張將屬性旋轉(zhuǎn)到行而不是列的表。就關(guān)係範式而言,EAV 並不是一個有效的設(shè)計,但仍然有很多人使用它。這就是另一個答案提到的「屬性模式」。請參閱 StackOverflow 上使用 eav 標記 的其他問題,以了解一些陷阱。

我在簡報可擴展資料建模中寫了更多相關(guān)內(nèi)容。


關(guān)於 EAV 的其他想法:雖然很多人似乎喜歡 EAV,但我不喜歡。這似乎是最靈活的解決方案,因此也是最好的解決方案。但是,請記住這句格言 TANSTAAFL。以下是 EAV 的一些缺點:

  • 無法強制指定列(相當於 NOT NULL)。
  • 無法使用 SQL 資料類型來驗證條目。
  • 無法確保屬性名稱拼字一致。
  • 無法在任何給定屬性的值上放置外鍵,例如查找表。
  • 在傳統(tǒng)表格佈局中取得結(jié)果既複雜又昂貴,因為要從多行取得屬性,您需要對每個屬性執(zhí)行JOIN

EAV 的靈活性程度需要您在其他方面做出犧牲,這可能會使您的程式碼比以更傳統(tǒng)的方式解決原始問題更複雜(或更糟)。

並且在大多數(shù)情況下,沒有必要具有這種程度的靈活性。在OP關(guān)於產(chǎn)品類型的問題中,為每個產(chǎn)品類型建立一個用於產(chǎn)品特定屬性的表格要簡單得多,因此至少對於相同產(chǎn)品類型的條目強制執(zhí)行一些一致的結(jié)構(gòu)。

只有當必須允許每一行可能有一組不同的屬性時,我才會使用 EAV。當您的產(chǎn)品類型有限時,EAV 就顯得有些過分了。類別表繼承將是我的第一選擇。


2019 年更新:我越多看到人們使用 JSON 作為「許多自訂屬性」問題的解決方案,我就越不喜歡該解決方案。即使使用特殊的 JSON 函數(shù),它也會使查詢變得過于復雜> 來支援他們。與儲存在普通的行和列中相比,儲存 JSON 文件需要更多的儲存空間。

基本上,這些解決方案在關(guān)聯(lián)式資料庫中都不是簡單或有效的。擁有「可變屬性」的整個想法從根本上與關(guān)係理論不一致。

歸根結(jié)底,您必須選擇對您的應用程式影響最小的解決方案。因此,在選擇資料庫設(shè)計之前,您需要知道如何查詢資料。無法選擇一種“最佳”解決方案,因為任何解決方案都可能最適合給定的應用程式。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板