我需要创建一个动态数据库结构来支持商店系统的不同项目。
任何类型的项目。
例如:衬衫衬衫需要有尺寸(s、m、l)和类型(长袖、短袖)
衬衫的价格必须与类型和尺寸相对应。
同样的数据库结构必须支持更基本的项目......比如三明治。三明治只需要一个价格。
我不知道如何创建一个旨在支持复杂项目结构和更多基本项目的数据库。
我需要创建一个动态数据库结构来支持商店系统的不同项目。
任何类型的项目。
例如:衬衫衬衫需要有尺寸(s、m、l)和类型(长袖、短袖)
衬衫的价格必须与类型和尺寸相对应。
同样的数据库结构必须支持更基本的项目......比如三明治。三明治只需要一个价格。
我不知道如何创建一个旨在支持复杂项目结构和更多基本项目的数据库。
面对每个项目属性可能彼此无关的东西,当您将新项目添加到“商店”时需要动态添加,我会将一般信息放在我的表格中,并将项目特定的东西放在 XML 中(使用该项目或可能的子类型的自定义模式)。或者,您可以使用键值查找表来完成类似的操作。
对于某些已知的业务功能(价格计算),您可以将公式以每个定义的格式存储在项目记录中,并让它引用需要用于计算它们的特定属性(来自 XML 或键值表)。对于针对自定义/未知属性的其他常用功能也是如此。
我做了类似的事情,以允许自定义处理用户创建的调查的调查答案,它运行良好,但如果不是必需的,它比你想要的要复杂和脆弱得多。
更新
示例(为了说明而放在一起,不是推荐的实际方法):
ItemTable
-------------
ItemName
BasicDescription
CostFormula
XMLExtendedData
然后是衬衫项目的 XML 模式(不是特定的库存项目,而是定义这件特定衬衫范围的东西)
<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
MariaDB 10.0 中使用动态列来处理非结构化的每项属性,同时仍然维护基本上仍然是关系数据库(并且对于所有实际目的,仍然是 MySQL),一种方法是使用动态列。
一个典型的用例是需要存储可能具有许多不同属性(如尺寸、颜色、重量等)的项目,并且可能的属性集非常大和/或事先未知。在这种情况下,可以将属性放入动态列中。
它们的行为与普通列不同,因为您必须使用COLUMN_*()
函数来获取和设置值,但这可能值得评估。
https://mariadb.com/kb/en/dynamic-columns/
(这个答案几乎听起来像是一个插件,但事实并非如此;我与 MariaDB 基金会没有任何关系。)