Skip to content

数据库结构设计方案

以下是CRM(客户关系管理)系统数据库结构设计方案,包括每个实体的详细字段、数据类型、业务逻辑、关系以及可能的约束和索引。

一、数据库设计

1.1. 客户表(gonQiCustomer

字段类型描述约束
customerIDINT客户的唯一标识符,自动递增主键,唯一,非空
weiNameVARCHAR(255)客户的全名非空
weiFirstNameVARCHAR(100)客户的名字(对于分名字和姓氏的场合允许为空,如果Name字段已填写
weiLastNameVARCHAR(100)客户的姓氏(对于分名字和姓氏的场合)允许为空,如果Name字段已填写
weiCompanyVARCHAR(255)客户所在公司的名称(如果适用)允许为空
weiContactVARCHAR(50)客户的联系电话允许为空,但建议填写
weiEmailVARCHAR(255)客户的电子邮件地址唯一,非空,且符合电子邮件格式
weiAddressTEXT客户的详细地址允许为空
weiCityVARCHAR(100)客户所在的城市允许为空
weiStateVARCHAR(100)客户所在的州/省(如果适用)允许为空
weiCountryVARCHAR(100)客户所在的国家允许为空
weiPostalCodeVARCHAR(20)客户的邮政编码允许为空
weiCreateTimeDATETIME客户记录创建的日期和时间默认值为当前时间
LastModifiedDATETIME客户记录最后一次修改的日期和时间默认值为当前时间,每次记录更新时自动更新
weiStatusVARCHAR(50)客户的当前状态(如活跃、非活跃、潜在客户等)允许为空,但建议填写
weiNotesTEXT关于客户的额外备注或信息允许为空
weiSourceVARCHAR(100)客户来源(如网站、展会、推荐等)允许为空

索引与关系

  • 索引:在Email字段上创建唯一索引,以确保没有重复的电子邮件地址。
  • 关系:无直接外键关系,但可能与其他实体(如销售机会、订单等)通过CustomerID字段建立关联。

业务逻辑与约束

  • 客户的Email地址必须唯一,以确保不会重复添加相同的客户。
  • 客户的创建和修改时间应自动记录,以确保数据的时效性。

1.2. 销售机会管理表(gonQiSalesOpportunity

字段类型描述约束
OpportunityIDINT销售机会的唯一标识符,自动递增主键,唯一,非空
CustomerIDINT关联的客户ID外键,引用Customer表的CustomerID字段
NameVARCHAR(255)销售机会的名称或描述非空
StageVARCHAR(100)销售机会的阶段(如接触、谈判、签约等)允许为空,但建议填写
ProbabilityDECIMAL(3,2)销售机会成功的概率(百分比)允许为空,但应在0到100之间
AmountDECIMAL(15,2)预计的销售金额允许为空,但应为正数
CloseDateDATETIME预计的成交日期允许为空
AssignedToINT负责该销售机会的用户ID(外键关联到User表外键,引用User表的UserID字段
CreateDateDATETIME销售机会记录的创建日期和时间默认值为当前时间
LastModifiedDATETIME销售机会记录最后一次修改的日期和时间默认值为当前时间,每次记录更新时自动更新
StatusVARCHAR(50)销售机会的状态(如进行中、已丢失、已赢得等)允许为空,但建议填写
SourceVARCHAR(100)销售机会的来源(如内部推荐、营销活动、网站等)允许为空

索引与关系

  • 索引:在CustomerIDAssignedTo字段上创建索引,以加速查询。
  • 关系:通过CustomerID字段与Customer表建立关联,通过AssignedTo字段与User表建立关联。

业务逻辑与约束

  • 销售机会的阶段和概率应反映销售流程的真实情况。
  • 销售机会的负责人应明确,以便于跟进和分配任务。

1.3. 订单(gonQiOrder

字段类型描述约束
OrderIDINT订单的唯一标识符,自动递增主键,唯一,非空
CustomerIDINT关联的客户ID外键,引用Customer表的CustomerID字段
OrderDateDATETIME订单的创建日期和时间非空
StatusVARCHAR(50)订单的状态(如待处理、已发货、已完成等)非空
TotalAmountDECIMAL(15,2)订单的总金额非空,且应为正数
BillingAddressTEXT订单的账单地址(可能与客户地址不同)允许为空,但如果为空,则使用客户的默认地址
ShippingAddressTEXT订单的发货地址(可能与客户地址不同)允许为空,但如果为空,则使用客户的默认地址
PaymentMethodVARCHAR(100)订单的支付方式(如信用卡、支票、PayPal等)非空
PaymentStatusVARCHAR(50)订单的支付状态(如已支付、未支付、部分支付等)非空
NotesTEXT关于订单的额外备注或信息允许为空
NotesTEXT关于订单的额外备注或信息允许为空

索引与关系

  • 索引:在CustomerID字段上创建索引,以加速查询。
  • 关系:通过CustomerID字段与Customer表建立关联。

业务逻辑与约束

  • 订单的总金额应根据订单明细计算得出,确保数据的准确性。
  • 订单的支付状态和支付方法应清晰明了,以便于财务处理。

1.4. 产品表(gonQiProduct

字段类型描述约束
ProductIDINT产品的唯一标识符,自动递增主键,唯一,非空
NameVARCHAR(255)产品的名称非空
DescriptionTEXT产品的详细描述允许为空
PriceDECIMAL(15,2)产品的单价非空,且应为正数
CategoryVARCHAR(100)产品的类别(如电子产品、服装等)允许为空
StockINT产品的库存数量非空,且应为非负数
SKUVARCHAR(100)产品的库存单位代码(SKU),用于内部跟踪和库存管理唯一,非空
CreateDateDATETIME产品记录创建的日期和时间默认值为当前时间
LastModifiedDATETIME产品记录最后一次修改的日期和时间默认值为当前时间,每次记录更新自动时更新
IsActiveBIT产品,是否但处于可能活动与其他状态实体((可如销售订单)。明细) 通过-Product ID约束字段:建立非关联空。默认值为1(表示活动)。

索引与关系

  • 索引:在SKU字段上创建唯一索引,以确保没有重复的产品SKU。
  • 关系:无直接外键关系

业务逻辑与约束

  • 产品的SKU应唯一,以确保库存管理的准确性。
  • 产品的库存数量应实时更新,以避免超卖情况的发生。

1.5. 订单明细表(gonQiOrderDetail

字段类型描述约束
OrderDetailIDINT订单明细的唯一标识符,自动递增主键,唯一,非空
OrderIDINT关联的订单ID外键,引用Order表的OrderID字段
ProductIDINT关联的产品ID外键,引用Product表的ProductID字段
QuantityINT订购的产品数量非空,且应为正整数
UnitPriceDECIMAL(15,2)订购产品的单价(可能与产品表中的价格不同,用于促销或折扣)非空,且应为正数
DiscountDECIMAL(5,2)应用于该订单明细的折扣百分比允许为空,但应在0到100之间
TotalPriceDECIMAL(15,2)该订单明细的总价(数量乘以单价减去折扣)计算列,不允许直接更新
CustomerIDINT
CustomerIDINT
CustomerIDINT
CustomerIDINT
CustomerIDINT
CustomerIDINT

索引与关系

  • 索引:在OrderIDProductID字段上创建复合索引,以加速查询。
  • 关系:通过OrderID字段与Order表建立关联,通过ProductID字段与Product表建立关联。
  • 计算列:TotalPrice是一个计算列,其值由Quantity *UnitPrice* (1 - Discount/100)计算得出。

业务逻辑与约束

  • 订单明细的总价应根据数量、单价和折扣计算得出,确保数据的准确性。
  • 订单明细应关联到具体的订单和产品,以便于跟踪和查询。

二、数据库性能优化

  1. 索引优化:在常用的查询字段上创建索引,以提高查询性能。
  2. 数据完整性:使用外键约束和唯一约束来确保数据的完整性和一致性。
  3. 事务处理:对于涉及多个表的更新操作,应使用事务来确保数据的原子性和一致性。
  4. 备份与恢复:定期备份数据库,以防止数据丢失和损坏。同时,应制定数据恢复计划,以应对可能出现的故障。

通过以上详细的数据库结构设计、业务逻辑与约束以及性能考虑,可以确保CRM系统能够高效地管理客户信息、销售机会、订单和产品等数据,为企业的客户关系管理提供有力的支持。