1
00:00:00,280 --> 00:00:03,440
下一个要探讨的模式是物品模式
2
00:00:04,310 --> 00:00:08,300
说是物品模式,实际上更多的说物品规格
3
00:00:09,210 --> 00:00:12,560
首先,我们要区分一下物品和物品规格的定义
4
00:00:14,440 --> 00:00:18,770
你看右边这个
5
00:00:19,880 --> 00:00:22,230
同样是这么多瓶可乐
6
00:00:23,240 --> 00:00:25,180
这是一个物品还是多个物品
7
00:00:26,230 --> 00:00:27,620
如果我们认为是一个
8
00:00:28,120 --> 00:00:29,820
实际上我们说的就是规格
9
00:00:31,090 --> 00:00:31,950
如果是多个
10
00:00:32,790 --> 00:00:33,910
它们是可以区分的
11
00:00:34,560 --> 00:00:35,900
或者说有必要区分的
12
00:00:37,280 --> 00:00:38,590
说的实际上就是物品
13
00:00:44,040 --> 00:00:47,680
比如说,像我们单位里面有很多台电脑
14
00:00:47,690 --> 00:00:50,320
当时采购的时候是批量采购回来的
15
00:00:50,840 --> 00:00:53,210
采购100台一模一样的电脑
16
00:00:53,980 --> 00:00:56,000
当然说一模一样,实际上也不是一模一样
17
00:00:56,010 --> 00:01:00,090
因为这100台里面,出厂的时候
18
00:01:00,260 --> 00:01:03,270
编号,每个产品上面
19
00:01:03,280 --> 00:01:05,990
应该有一个流水号
20
00:01:06,120 --> 00:01:07,550
应该也是不一样的
21
00:01:08,060 --> 00:01:10,210
因为生产也是有管控的
22
00:01:10,970 --> 00:01:12,850
但是我们买的时候是不管这个的
23
00:01:13,660 --> 00:01:15,620
商场也不管这个
24
00:01:15,630 --> 00:01:17,890
他卖给我的实际上是同一个商品
25
00:01:18,280 --> 00:01:19,310
卖了100件
26
00:01:20,120 --> 00:01:21,600
那么我们拿回单位以后
27
00:01:22,960 --> 00:01:24,860
我们就给它编上我们自己的号
28
00:01:25,800 --> 00:01:29,830
然后分给不同的员工来使用
29
00:01:31,740 --> 00:01:36,590
这时候每个电脑它就可以互相区分了
30
00:01:37,430 --> 00:01:40,590
很可能张三的电脑坏掉了
31
00:01:41,440 --> 00:01:43,920
拿去修理,李四的还是正常的
32
00:01:44,530 --> 00:01:44,850
33
00:01:46,570 --> 00:01:48,000
就可以有这样的区别
34
00:01:48,780 --> 00:01:55,920
但是针对同样规格的物品的单个单个
35
00:01:56,370 --> 00:01:57,720
这个不是我们
36
00:01:57,730 --> 00:01:59,600
这个模式的重点
37
00:02:00,250 --> 00:02:01,330
我们模式的重点是哪一个
38
00:02:01,340 --> 00:02:04,630
就是商场里面
39
00:02:04,880 --> 00:02:06,460
或者说物品规格
40
00:02:06,470 --> 00:02:09,150
众多的时候的
41
00:02:09,160 --> 00:02:10,310
一个管理的问题
42
00:02:12,990 --> 00:02:15,120
商场、药店,都可以
43
00:02:15,290 --> 00:02:16,400
包括公文
44
00:02:16,410 --> 00:02:18,680
包括,都可以
45
00:02:18,690 --> 00:02:25,890
很多东西,分类繁多
46
00:02:25,900 --> 00:02:28,170
而且不断变化的东西,都可以
47
00:02:29,100 --> 00:02:30,900
我们看,举例看这个
48
00:02:31,770 --> 00:02:34,960
商品分为食品、服装、电器
49
00:02:36,240 --> 00:02:38,280
电器分为洗衣机、电器、空调
50
00:02:38,290 --> 00:02:40,400
电视机分为液晶电视、等离子电视
51
00:02:40,800 --> 00:02:44,720
我们来看这个,它们的分类有很多层
52
00:02:44,930 --> 00:02:45,800
第二个,还可以不断
53
00:02:45,810 --> 00:02:49,350
往下面延伸,或者往横的加
54
00:02:49,850 --> 00:02:50,330
这是第一点
55
00:02:50,340 --> 00:02:52,290
第二点,就是特性各自不同
56
00:02:53,710 --> 00:02:56,560
食品的这里,有原料,有保质期
57
00:02:57,210 --> 00:02:58,600
电器就没有
58
00:02:58,920 --> 00:02:59,990
但电器有功率
59
00:03:01,050 --> 00:03:03,650
这是所有电器我们都要关注的
60
00:03:04,650 --> 00:03:08,830
但是,电视机又有自己的,屏幕尺寸
61
00:03:09,160 --> 00:03:10,590
分辨率,3D支持
62
00:03:10,720 --> 00:03:13,740
这些是空调洗衣机没有的
63
00:03:14,970 --> 00:03:17,920
然后电视里面又分液晶、等离子体电视
64
00:03:17,930 --> 00:03:20,850
而液晶电视里面又多一个背光方式
65
00:03:23,050 --> 00:03:24,490
这是液晶电视特有的
66
00:03:25,440 --> 00:03:26,620
别的电视可能就没有
67
00:03:29,630 --> 00:03:33,080
所以,你要说买一个液晶电视的话
68
00:03:33,090 --> 00:03:38,420
所有的,这个这个,上面还有的话
69
00:03:39,360 --> 00:03:41,920
上面肯定还有条码什么之类的
70
00:03:41,930 --> 00:03:43,440
所有商品都有
71
00:03:43,810 --> 00:03:44,880
这样一串上去
72
00:03:45,010 --> 00:03:47,980
都是液晶电视的特征
73
00:03:48,270 --> 00:03:50,290
都要关注的特征
74
00:03:54,680 --> 00:03:56,470
这样的一个结构
75
00:03:58,210 --> 00:04:02,450
当然,通过泛化关系来建模是可以的
76
00:04:02,660 --> 00:04:04,880
但是泛化建模的话
77
00:04:06,190 --> 00:04:10,590
如果说它行为上并没有什么特别的变化
78
00:04:11,400 --> 00:04:13,310
主要还是数据上的变化的话
79
00:04:13,760 --> 00:04:15,350
我们就可以把它转换一个
80
00:04:15,980 --> 00:04:17,270
那也就是我们前面讲的
81
00:04:20,030 --> 00:04:23,980
把泛化结构变成类类型的
82
00:04:23,990 --> 00:04:26,280
递归关联或自反关联
83
00:04:28,230 --> 00:04:31,500
那么这个类类型就是物品类别或商品类别
84
00:04:35,190 --> 00:04:38,000
然后自反关联,也就是说,这个时候
85
00:04:38,010 --> 00:04:42,330
就把这个类的这种树状结构
86
00:04:42,340 --> 00:04:44,410
就变成了
87
00:04:45,240 --> 00:04:48,920
类别对象的树状结构,都是类别对象
88
00:04:49,580 --> 00:04:51,260
实际上就变成自反关联了
89
00:04:55,040 --> 00:04:57,590
然后,这个特征怎么办呢
90
00:04:57,990 --> 00:05:00,620
那就是变成这4个类了
91
00:05:02,430 --> 00:05:05,200
物品类别,定义了一些物品类别特征
92
00:05:05,910 --> 00:05:07,440
然后这边放它的名称
93
00:05:08,440 --> 00:05:12,110
然后,物品定义了物品特征
94
00:05:12,120 --> 00:05:13,190
这边放它的值
95
00:05:14,080 --> 00:05:16,590
然后,物品特征关联到类别特征
96
00:05:16,600 --> 00:05:18,070
物品关联到物品类别
97
00:05:20,880 --> 00:05:28,050
这样来,我们来看这个类图怎么实现
98
00:05:32,160 --> 00:05:35,560
首先,这个是1对多的自反关联
99
00:05:37,290 --> 00:05:41,270
1对多的话,我们就不用添加一个新的表了
100
00:05:41,440 --> 00:05:42,550
直接在物品类别这里
101
00:05:42,560 --> 00:05:45,810
添加一个上级类别的ID就可以
102
00:05:46,930 --> 00:05:47,770
然后这个1对多
103
00:05:47,780 --> 00:05:51,380
就是这边1,这边多,物品类别特征
104
00:05:51,390 --> 00:05:53,020
这边有物品类别ID
105
00:05:54,140 --> 00:05:55,380
然后物品是多
106
00:05:55,390 --> 00:05:58,520
这是1,就是物品这边有物品类别ID
107
00:05:59,250 --> 00:06:03,030
然后这个多,这个1,那就是物品特征这边有物品ID
108
00:06:03,040 --> 00:06:08,410
还有一个什么,物品类别特征ID,映射过来
109
00:06:09,670 --> 00:06:10,380
就是这样
110
00:06:12,670 --> 00:06:14,100
这有上级类别ID
111
00:06:15,140 --> 00:06:18,180
然后物品类别ID
112
00:06:19,080 --> 00:06:20,750
物品ID,特征ID
113
00:06:21,250 --> 00:06:26,050
这两个,这边有类别ID作为外键
114
00:06:27,660 --> 00:06:28,590
这是数据库的映射
115
00:06:34,400 --> 00:06:36,590
我们来看,怎样来填数据
116
00:06:38,580 --> 00:06:40,720
这是刚才泛化的类图
117
00:06:40,810 --> 00:06:44,400
我们给它标个123456789
118
00:06:44,410 --> 00:06:46,630
这是9个类别
119
00:06:46,800 --> 00:06:50,810
物品类别我们就按照9个来填
120
00:06:51,570 --> 00:06:53,220
Id,123456789
121
00:06:53,940 --> 00:06:56,930
然后,你看商品这个是顶级的
122
00:06:57,260 --> 00:06:58,210
上级类别没有
123
00:06:58,630 --> 00:07:01,790
然后234,就是食品服装电器
124
00:07:02,150 --> 00:07:04,540
上级类别是1
125
00:07:05,370 --> 00:07:08,560
567,上级类别是4,电器
126
00:07:08,830 --> 00:07:14,260
89,上级类别是6,这是物品类别
127
00:07:16,670 --> 00:07:20,400
同样,我们来看,物品类别特征的数据
128
00:07:20,410 --> 00:07:26,250
你看,2,其他的没列出来的,我们就不管了
129
00:07:26,260 --> 00:07:29,030
我们就看列出来的,2有3个特征
130
00:07:29,300 --> 00:07:30,480
原料、保质期
131
00:07:32,380 --> 00:07:33,350
贮藏条件
132
00:07:34,090 --> 00:07:36,880
原料、保质期、贮藏条件
133
00:07:36,890 --> 00:07:37,590
物品类别ID是2
134
00:07:38,210 --> 00:07:40,160
同样的,电源功率是4
135
00:07:40,520 --> 00:07:43,960
屏幕尺寸、分辨率、3D支持,是6
136
00:07:43,970 --> 00:07:47,410
背光方式,8
137
00:07:47,540 --> 00:07:49,210
就这样照着填下来就行了
138
00:07:49,220 --> 00:07:50,560
139
00:07:53,200 --> 00:07:54,150
刚才我们说了
140
00:07:56,260 --> 00:07:59,210
当我们要买液晶电视的时候
141
00:08:00,020 --> 00:08:02,470
假设我们说,我要买一台液晶电视
142
00:08:03,620 --> 00:08:06,530
那么我们要首先第一个要解决的问题是
143
00:08:06,540 --> 00:08:08,450
如果你要作为一台液晶电视
144
00:08:08,460 --> 00:08:09,770
比如说,我这里有一个产品
145
00:08:10,240 --> 00:08:12,590
它归属于液晶电视这个类别
146
00:08:13,230 --> 00:08:15,090
那么这个产品,或者这个物品
147
00:08:15,450 --> 00:08:17,740
应该要标注哪些特征
148
00:08:18,750 --> 00:08:20,440
我们的第一个计算
149
00:08:20,450 --> 00:08:24,020
就是给你一个物品类别
150
00:08:24,030 --> 00:08:28,060
你告诉我这个类别应有的特征
151
00:08:29,510 --> 00:08:31,720
显然这个特征不只是它自己了
152
00:08:31,730 --> 00:08:35,080
比如说,给你物品类别液晶电视
153
00:08:37,220 --> 00:08:38,840
特征不只是包括它自己
154
00:08:38,850 --> 00:08:40,670
不能这个就完了
155
00:08:40,680 --> 00:08:43,270
你还有上级类别的特征
156
00:08:44,420 --> 00:08:48,290
上级类别的上级类别,再往上,一直到没有
157
00:08:48,760 --> 00:08:49,860
不能再往上为止
158
00:08:49,990 --> 00:08:51,580
这一串上去这样的
159
00:08:52,470 --> 00:08:56,900
所以,不是说select一下就完了
160
00:08:57,310 --> 00:08:59,970
那么就有一个什么,递归的运算
161
00:09:00,530 --> 00:09:03,390
如果说我们用SQL语句
162
00:09:03,520 --> 00:09:05,430
我们可以把它写成一个存储过程
163
00:09:06,360 --> 00:09:09,610
这里,计算物品类别应有的特征
164
00:09:09,960 --> 00:09:11,500
参数是一个物品类别ID
165
00:09:13,610 --> 00:09:18,920
然后,你看,我们首先定义一个表
166
00:09:19,210 --> 00:09:21,740
内部的表,类似于临时表
167
00:09:21,990 --> 00:09:24,900
这个表,计算完了就销毁了
168
00:09:24,910 --> 00:09:27,980
不在数据库里面持久存储的
169
00:09:28,980 --> 00:09:30,770
那么这个表就是类别闭包
170
00:09:31,740 --> 00:09:32,580
171
00:09:32,590 --> 00:09:38,790
就是把类别往上级的上级
172
00:09:38,880 --> 00:09:40,410
一直一直找上级
173
00:09:40,620 --> 00:09:41,770
所有的类别找出来