MVC3发布有一段时间了,一直没有时间来学习。
最近总算有点闲余时间了,该抓紧搞搞学习,否则就什么都不懂了。
到http://www.asp.net/MVC 网站上面有个示例叫《Music Store》,把它荡下来学习学习。先从数据库入手。
将该示例的数据库附加到数据库服务器上。通过PowerDesigner反向生成PhysicalDataModel,然后再生成为ConceptualDataModel。(本人喜欢使用概念模型来分析设计数据库。原来生成出来的是英文内容,为了理解方便,我将英文添加了中文注释。)生成后的效果图如下:
该项目中有6个实体,其中专辑实体是整个案例中比较核心的部分。其它五个实体都是与它有关系的:
1.艺术家出了哪些专辑("艺术家"1对多"专辑")
2.专辑属于哪个流派("流派"一对多"专辑")
3.购物车中有哪些专辑("专辑"一对多"购物车")
4.订单中具体详情如何("订单"一对多"订单详情")
5.专辑存在于哪个订单详情中。("专辑"一对多"订单详情")
物理模型如下图所示:
看完之后心存疑问:
1.购物车是否需要用这个Carts表来保存...(等看完代码后再回头看看是个怎么回事)
购物车中的"购物车编号"怎么得来的?是否与用户有关系?
我认为"专辑"与"订单"是有直接关系的,应该是多对多的映射关系.(一张专辑存在多个订单中,一个订单里面有多个专辑).多对多关系在生成物理模型的时候会自动创建一个中间表,这个中间表就是这两个实体通过多对多产生出来的主外键组成.由于该中间表只有主外键还不能很好的描述订单里面专辑的详细信息(数量、单价),所以在这个反向生成出来的关系图上面多了个中间实体对象"订单详情".如果在该图上直接描述"专辑"与"订单"两个实体之间的关系的话,则将来需要在生成出来的物理模型上面的中间表添加上两个字段(数量、单价).
多对多的映射关系图可以建成如下所示:
生成出来的物理模型如下所示:
上图中就可以明显看出该中间表就少了两个字段(数量、单价),所以要自己加上.
生成出来的SQL代码如下:
/*==============================================================*/
/* DBMS name: Microsoft SQL Server 2008 */
/* Created on: 2011/2/25 16:29:13 */
/*==============================================================*/
5:
6:
select 1
from sysindexes
'Albums')
'FK_Album_Genre_FK'
and indid > 0
and indid < 255)
index Albums.FK_Album_Genre_FK
go
15:
select 1
from sysindexes
'Albums')
'FK__Album__ArtistId__276EDEB3_FK'
and indid > 0
and indid < 255)
index Albums.FK__Album__ArtistId__276EDEB3_FK
go
24:
select 1
from sysobjects
'Albums')
'U')
table Albums
go
31:
select 1
from sysobjects
'Artists')
'U')
table Artists
go
38:
select 1
from sysindexes
'Carts')
'FK_Cart_Album_FK'
and indid > 0
and indid < 255)
index Carts.FK_Cart_Album_FK
go
47:
select 1
from sysobjects
'Carts')
'U')
table Carts
go
54:
select 1
from sysobjects
'Genres')
'U')
table Genres
go
61:
select 1
from sysindexes
'OrderDetails')
'FK_OrderDetail_Album_FK'
and indid > 0
and indid < 255)
index OrderDetails.FK_OrderDetail_Album_FK
go
70:
select 1
from sysindexes
'OrderDetails')
'FK__InvoiceLi__Invoi__2F10007B_FK'
and indid > 0
and indid < 255)
index OrderDetails.FK__InvoiceLi__Invoi__2F10007B_FK
go
79:
select 1
from sysobjects
'OrderDetails')
'U')
table OrderDetails
go
86:
select 1
from sysobjects
'Orders')
'U')
table Orders
go
93:
/*==============================================================*/
/* Table: Albums */
/*==============================================================*/
table Albums (
identity(1, 1),
null,
null,
null,
null,
'/Content/Images/placeholder.gif',
nonclustered (AlbumId)
105: )
go
107:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'专辑编号',
'AlbumId'
go
114:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'艺术家编号',
'ArtistId'
go
121:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'流派编号',
'GenreId'
go
128:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'标题',
'Title'
go
135:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'价格',
'Price'
go
142:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'专辑图片路径',
'AlbumArtUrl'
go
149:
/*==============================================================*/
/* Index: FK__Album__ArtistId__276EDEB3_FK */
/*==============================================================*/
on Albums (
ASC
155: )
go
157:
/*==============================================================*/
/* Index: FK_Album_Genre_FK */
/*==============================================================*/
on Albums (
ASC
163: )
go
165:
/*==============================================================*/
/* Table: Artists */
/*==============================================================*/
table Artists (
identity(1, 1),
null,
nonclustered (ArtistId)
173: )
go
175:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'艺术家编号',
'ArtistId'
go
182:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'艺术家名称',
'Name'
go
189:
/*==============================================================*/
/* Table: Carts */
/*==============================================================*/
table Carts (
identity(1, 1),
null,
null,
null,
null,
nonclustered (RecordId)
200: )
go
202:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'购物车实体',
'Carts'
go
209:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'记录编号',
'RecordId'
go
216:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'专辑编号',
'AlbumId'
go
223:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'购物车编号',
'CartId'
go
230:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'数量',
'Count'
go
237:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'创建时间',
'DateCreated'
go
244:
/*==============================================================*/
/* Index: FK_Cart_Album_FK */
/*==============================================================*/
on Carts (
ASC
250: )
go
252:
/*==============================================================*/
/* Table: Genres */
/*==============================================================*/
table Genres (
identity(1, 1),
null,
null,
nonclustered (GenreId)
261: )
go
263:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'流派编号',
'GenreId'
go
270:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'流派名称',
'Name'
go
277:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'流派描述',
'Description'
go
284:
/*==============================================================*/
/* Table: OrderDetails */
/*==============================================================*/
table OrderDetails (
identity(1, 1),
null,
null,
null,
null,
nonclustered (OrderDetailId)
295: )
go
297:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'订单详情编号',
'OrderDetailId'
go
304:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'专辑编号',
'AlbumId'
go
311:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'订单编号',
'OrderId'
go
318:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'数量',
'Quantity'
go
325:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'单价',
'UnitPrice'
go
332:
/*==============================================================*/
/* Index: FK__InvoiceLi__Invoi__2F10007B_FK */
/*==============================================================*/
on OrderDetails (
ASC
338: )
go
340:
/*==============================================================*/
/* Index: FK_OrderDetail_Album_FK */
/*==============================================================*/
on OrderDetails (
ASC
346: )
go
348:
/*==============================================================*/
/* Table: Orders */
/*==============================================================*/
table Orders (
identity(1, 1),
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
nonclustered (OrderId)
367: )
go
369:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'订单',
'Orders'
go
376:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'订单编号',
'OrderId'
go
383:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'订单日期',
'OrderDate'
go
390:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'用户名',
'Username'
go
397:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'名字',
'FirstName'
go
404:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'姓氏',
'LastName'
go
411:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'地址',
'Address'
go
418:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'城市',
'City'
go
425:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'省份/州',
'State'
go
432:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'邮政编码',
'PostalCode'
go
439:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'国家',
'Country'
go
446:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'联系电话',
'Phone'
go
453:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'Email/电子邮件',
'Email'
go
460:
declare @CurrentUser sysname
select @CurrentUser = user_name()
'MS_Description',
'总计',
'Total'
go
467: