成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們該如何設計數據庫(二)

數據庫 數據庫運維
本篇文章旨在討論如何抽象(以用戶作為抽象的例子),并提出一些解耦的思路。詳細請見下文

最近公司要開發新系統,基本決定使用ORM(高層還在猶豫,擔心效率問題)。既然使用了ORM,那么自然而然的就想到了用面向對象的思想來設計數據庫。

本篇文章旨在討論如何抽象(以用戶作為抽象的例子),并提出一些解耦的思路。

我也是***次在實際項目中使用面向對象的思想來設計數據庫,寫下這篇博客,也是希望與大家多多交流。

正文開始

首先來需求分析

我們的系統有前臺和后臺,前臺用戶有:Man,Woman,SuperMan,SpiderMan與IronMan。后臺用戶為Administrator。

前臺用戶都要填寫聯系方式與地址,然后SuperMan,SpiderMan與IronMan都有Ability。

需求很簡單。那么按照這個需求,我們來隨手畫一個繼承關系圖。其中V代表抽象類(應該是abstract,畫圖的時候腦抽想著是virtual就用V開頭了,懶得改圖了大家湊合著看吧),I代表Interface。如下圖:

從圖中可以看出,由抽象類Person派生出Administration與抽象類User。類Man與類Womam實現了接口Address與接口Contact,Inhumans則實現了Ability接口。

然后抽象類代碼:

  1. View Code   
  2.  
  3.     public abstract class Person  
  4.     {  
  5.         public string Username { get; set; }  
  6.         public string Password { get; set; }  
  7.     }  
  8.  
  9.     public abstract class User : Person  
  10.     {  
  11.         public string Name { get; set; }  
  12.     } 

接口代碼:

  1. View Code   
  2.  
  3.     public interface IAddress  
  4.     {  
  5.         string Address { get; set; }  
  6.     }  
  7.  
  8.     public interface IContact  
  9.     {  
  10.          string Email{get;set;}  
  11.          string WorkPhone { get; set; }  
  12.          string MobilePhone { get; set; }  
  13.          string Fax { get; set; }  
  14.     } 

***是Man類和Woman類:

  1. View Code   
  2.  
  3.     public class Man : User, IContact, IAddress  
  4.     {  
  5.         public string Address { get; set; }  
  6.         public string Email { get; set; }  
  7.         public string WorkPhone { get; set; }  
  8.         public string MobilePhone { get; set; }  
  9.         public string Fax { get; set; }  
  10.  
  11.         public bool HasCar { get; set; }       //如果這三項都為false的話  
  12.         public bool HasHouse { get; set; }     //這輩子就甭想結婚了  
  13.         public bool HasMoney { get; set; }     //T T我淚涌  
  14.     } 
  1. View Code   
  2.  
  3.     class Woman : User, IAddress, IContact  
  4.     {  
  5.         public string Address { get; set; }  
  6.         public string Email { get; set; }  
  7.         public string WorkPhone { get; set; }  
  8.         public string MobilePhone { get; set; }  
  9.         public string Fax { get; set; }  
  10.  
  11.         public bool IsBeauty { get; set; }  //這個為true,一輩子不愁吃喝  
  12.     } 

代碼非常簡單。其他幾個類限于篇幅就不說那么細了。

那么按照這個model,使用EF Model First來建立數據庫,得到的Woman表如下:

那么接下來就是重點了:為什么不把Contact和Address分表儲存。這樣與Man表、Woman表寫在一起的話,出現改動(如新增一種聯系方式),會不會非常痛苦。

如果不是使用ORM,那么這個改動的確是很痛苦;但是如果使用了(這里默認使用的ORM可以從Model生成/改動數據庫),那么這個改動是沒什么大不了的了,只需要修改一下接口定義,然后根據報錯去改就好了。至于數據庫的變動,就交給ORM去做就OK了。

這樣有一個好處,可以在有限的范圍內實現解耦,部分減少了關系——若將Contact和Address分表的話,取Woman要Join兩次,這看起來沒什么大不了的,但是如果放大了看,如果是join十次呢?這樣弄出來的東西很難去維護(現在公司老系統就是這樣,動不動就join十次二十次的,改動起來十分費力)

具體怎么去解耦,這個問題相當相當的深奧,就不敢在這班門弄斧了。

原文鏈接:http://www.cnblogs.com/CrazyJinn/archive/2012/08/20/2637459.html

責任編輯:林師授 來源: 博客園
相關推薦

2012-04-28 10:07:43

數據庫數據庫設計

2013-03-20 11:33:31

2013-03-20 13:25:53

數據庫數據庫設計

2013-03-20 13:35:12

數據庫數據庫設計

2013-03-20 13:16:15

2011-05-19 11:01:14

ERWin數據庫設計

2023-10-16 09:00:00

數據庫分布式系統

2017-07-06 15:52:22

大數據數據分層數據倉庫

2022-06-30 18:17:00

數據集云數據建模計數據倉庫

2021-10-03 15:00:44

數據庫mysql單機

2020-12-31 05:29:25

數據庫Powerdesign建模

2011-04-12 10:59:46

Oracle數據庫

2017-11-27 06:01:37

數據庫中間件中間層

2018-07-27 06:08:12

2017-11-23 15:06:14

前端數據庫開發

2017-11-30 08:56:14

數據庫中間件架構師

2015-06-23 13:56:30

數據庫設計面向對象

2011-08-23 17:45:54

MySQL丟失root密碼

2021-04-14 09:00:00

MySQL數據庫MongoDB

2024-09-12 09:30:55

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.日韩在线 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 成人久久久 | 日日摸夜夜添夜夜添精品视频 | 婷婷色在线 | 一级片在线观看 | 91在线观看免费 | 欧美九九| 欧美一区二区三区视频 | 亚洲一区二区精品视频 | 欧美二区在线 | av入口| 91精品国产91久久久久久吃药 | 日韩欧美综合在线视频 | 日韩三级在线 | 91精品久久久久久久久中文字幕 | 亚洲精品久久久久久久不卡四虎 | www.日韩av.com| 国产伦精品一区二区三区视频金莲 | 婷婷二区 | 久草网址 | 黄色成人在线网站 | 欧美精品一区二区在线观看 | 日韩在线视频一区 | 日韩一区二区福利视频 | 欧美日韩在线一区二区 | 国产一区电影 | 国产精品一区视频 | 色综合视频| 激情网站在线观看 | 99精品视频在线观看 | 久久com| 天堂一区在线 | 综合久久综合久久 | 久久久久久久久久久高潮一区二区 | 久久99精品久久久水蜜桃 | 日本在线免费视频 | 日韩一区中文字幕 | 亚洲激情在线观看 | 国产成人99久久亚洲综合精品 | 超碰精品在线 |