根据需求设计mysql表
大家好,首先感谢大家浏览该问题
说下需求:商城项目中商品的属性问题,举个例子来说:
衣服有颜色和尺码两个属性,我的想法是单独的来一张表记录不同属性的价格和库存
比如:
黑色 - M号 - 70元 - 35件
黑色 - L号 - 73元 - 32件
白色 - L号 - 73元 - 30件
这张表就这么设计,但是问题来了,比如手机有这么几个属性,颜色、内存、运营商(非合约、移动、联通、电信)
如果仍然按上面衣服的方法来,很明显要多出一列,也就是
白色 - 32G - 移动合约机 - 20元 - 10部
白色 - 32G - 联通合约机 - 30元 - 50部
金色 - 32G - 电信合约机 - 10元 - 40部
如果把这些属性信息都序列化之后存储也可以,but当我想搜索华为32G移动合约机的时候似乎就是个麻烦事了,请问大家有没有什么好的思路可以提供,谢谢诸位,不胜感激
PS:看了ecshop的设计,是有个商品基价,然后价格在基价上加减,但是不太倾向这种做法,添加商品的时候似乎有些麻烦
回复内容:
大家好,首先感谢大家浏览该问题
说下需求:商城项目中商品的属性问题,举个例子来说:
衣服有颜色和尺码两个属性,我的想法是单独的来一张表记录不同属性的价格和库存
比如:
黑色 - M号 - 70元 - 35件
黑色 - L号 - 73元 - 32件
白色 - L号 - 73元 - 30件
这张表就这么设计,但是问题来了,比如手机有这么几个属性,颜色、内存、运营商(非合约、移动、联通、电信)
如果仍然按上面衣服的方法来,很明显要多出一列,也就是
白色 - 32G - 移动合约机 - 20元 - 10部
白色 - 32G - 联通合约机 - 30元 - 50部
金色 - 32G - 电信合约机 - 10元 - 40部
如果把这些属性信息都序列化之后存储也可以,but当我想搜索华为32G移动合约机的时候似乎就是个麻烦事了,请问大家有没有什么好的思路可以提供,谢谢诸位,不胜感激
PS:看了ecshop的设计,是有个商品基价,然后价格在基价上加减,但是不太倾向这种做法,添加商品的时候似乎有些麻烦
现在的问题,可以说都被人提问过了.你这个问题,可以参数我这个答案.
https://segmentfault.com/q/1010000005347571/a-1020000005347916
可以把表设计如下:
商品表
商品 id | 商品名称 |
---|---|
1 | iPhone |
2 | 黄瓜 |
商品属性表
商品 id | 规格 | 颜色 | 价格 |
---|---|---|---|
1 | 16g | 白色 | 4999 |
1 | 32g | 白色 | 5499 |
2 | 无 | 无 | 1 |
对于你现在自己练手项目,最适用就是这种设计了.
不过此种设计针对商品的属性一定或少的情况下适用,如果属性较多,那么就要增加属性字段,而且有的商品未必用到了这个属性,造成浪费,导致属性表不变扩大.例如商品2黄瓜.
可以变成如下设计:
属性表
属性 id | 属性名称 |
---|---|
1 | 规格 |
2 | 颜色 |
3 | 价格 |
商品种类表
种类 id | 商品 id |
---|---|
a | 1 |
b | 1 |
c | 2 |
商品属性表
商品种类 id | 属性 id | 属性值 |
---|---|---|
a | 1 | 16g |
a | 2 | 白色 |
a | 3 | 4999 |
b | 1 | 32g |
b | 2 | 白色 |
b | 3 | 4999 |
c | 4 | 上海 |
设计如上,商品黄瓜的属性只会产生一条数据.
个人觉得你这个问题应该是两个问题,第一如何设计一个好的商品表的数据结构,第二如何更好搜索商品。首先第一个问题:设计商品表。首先你得分析一下你的商城业务都有那些商品,商品主表跟商品属性表是一对多的关系,不同的商品可能需要设计不同的关系结构。简单思路有如ecshop那种,也有将属性单列一张表的,但是属性单列一张表会有数据冗余。
1.可以将属性表多设计几个字段。
1).设计一个商品表。存储商品的通用字段。
2).设计一个价格表,属性表字段包括,规格,颜色,但是由于有些字段不是通用的,所以可能会有冗余,可以放默认值。
2.如何更好搜索商品。
比如搜索:华为32G移动合约机,如果用户输入华为32G移动合约机,来进行商品搜索。如果华为32G移动合约机不是商品名称,系统应该先做分词,分词之后再进行搜索对比。如果华为32G移动合约机直接为商品名称,则可以直接搜索。
增加一个属性表
product_id key value
多个属性多几行记录就行了

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

MySQL和phpMyAdmin可以通過以下步驟進行有效管理:1.創建和刪除數據庫:在phpMyAdmin中點擊幾下即可完成。 2.管理表:可以創建表、修改結構、添加索引。 3.數據操作:支持插入、更新、刪除數據和執行SQL查詢。 4.導入導出數據:支持SQL、CSV、XML等格式。 5.優化和監控:使用OPTIMIZETABLE命令優化表,並利用查詢分析器和監控工具解決性能問題。

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

要安全、徹底地卸載MySQL並清理所有殘留文件,需遵循以下步驟:1.停止MySQL服務;2.卸載MySQL軟件包;3.清理配置文件和數據目錄;4.驗證卸載是否徹底。
