我需要创建一个动态数据库结构,以支持商店系统的不同项目。
任何类型的物品。
EX:衬衫 衬衫需要有尺码(s,m,l)和类型(长袖,短袖)
衬衫的价格必须与类型和尺寸相对应。
这个相同的数据库结构必须支持更基本的项目..就像三明治一样。三明治只需要付出代价。
我没有看到如何创建一个数据库来支持复杂的项目结构,然后是更基本的项目。
答案 0 :(得分:1)
面对每个项目属性可能与彼此无关的内容,并且需要在向“商店”添加新项目时动态添加,我会将一般信息放在我的表格和项目特定的东西中XML(具有针对该项目或可能是子类型的模式)。或者,您可以使用键值查找表来完成类似的操作。
对于某些已知的业务功能(价格计算),您可以在项目记录中以每个定义的格式存储公式,并让它引用需要用于的特定属性(来自XML或键值表)计算它们。对于自定义/未知预先属性的其他常见功能也是如此。
我做了类似的事情,允许自定义处理用户创建的调查的调查答案,并且运作良好,但如果不是要求,则比您想要的要复杂得多且脆弱。
<强>更新强>
示例(为了说明而不是推荐的实际方法):
ItemTable
-------------
ItemName
BasicDescription
CostFormula
XMLExtendedData
然后是衬衫物品的XML Schema(不是特定的库存物品,而是定义这件衬衫范围的东西)
<Shirt>
<Sizes/> ...
<Types/>
<BaseCost/>
<SizeCost/>
<TypeCost/>
</Shirt>
然后一行可能包含以下内容:
ItemTable
----------------------------------------------------------------------------
ItemName | BasicDescription | CostFormula
----------------------------------------------------------------------------
Edgy Cool Shirt | A cool shirt | BaseCost*formula using XML property/node names
然后是StockItems
表,其链接ItemTable
和一组XML属性以及关于实际项目的特定数据(即小的,短袖的绿色衬衫)。
考虑到所有这些令人头疼的问题,我有幸使用的所有PoS系统,非常基本的商品属性设置在物品上,并且(在最糟糕的情况下)类似物品的强力数据输入,乐趣比如:
Lumber 2x4x4 spruce: $1
Lumber 2x4x8 spruce: $2
Lumber 2x4x10 spruce: $2.5
Lumber 2x4x12 spruce: $4
Lumber 2x4x16 spruce: $99
Lumber 2x4x4 pine: $1.5
答案 1 :(得分:0)
处理非结构化的每个项目属性,同时仍然维护一个基本上仍然是关系数据库(并且仍然,对于所有实际用途,MySQL)的一种方法是在MariaDB 10.0中使用dynamic columns。
典型的用例是当需要存储可能具有许多不同属性(例如大小,颜色,重量等)的项目时,并且可能的属性集合预先非常大和/或未知。在这种情况下,可以将属性放入动态列中。
它们的行为与普通列的行为不同,因为您必须使用COLUMN_*()
函数来获取和设置值,但这可能值得评估。
https://mariadb.com/kb/en/dynamic-columns/
(这个答案几乎听起来像一个插件,但事实并非如此;我与MariaDB Foundation没有任何关系。)