小客户管理应用程序的数据库设置

时间:2015-01-20 14:32:01

标签: mysql database database-design

我目前正在为自己的业务用途开发一个小型CRM,但是在进行数据库设计时,我对如何设计它感到有些困惑。

我需要快速加载而不会给服务器或客户端带来压力。

以下是我需要的类别

  1. 客户:
    • 名称
    • 地址
    • 电话号码
  2. 访问:
    • 治疗阶段
    • 治疗类型
    • 治疗日期
    • 客户名称(从客户表中提取?)
  3. 预约:
    • 约会类型
    • 约会日期
    • 说明
    • 客户名称(从客户表中提取?)
  4. 交易:
    • 交易类型
    • 交易日期
    • 交易备注
    • 客户名称(从客户表中提取?)
  5. 如果说我想让那些不会访问我超过一年的客户,我是否需要在访问中添加一个表格?或者只是使用SQL查询类型来进行列表?

    非常感谢您的建议。

    谢谢, 珍

1 个答案:

答案 0 :(得分:0)

不确定您是否询问您的架构是否良好或如何获取正确的信息,所以这两者都是:

我会将您的架构更新为:

客户(p_key = CustomerId)

  • CustomerId(int)
  • FirstName(varchar)
  • LastName(varchar)

电话(p_key = CustomerId,PhoneType,DateEffective)客户可能有多种电话类型(小区,家庭,工作),可能会提供多种电话类型(获得新号码)。您可以使用DateTime覆盖或保留历史记录,使数字生效。

  • CustomerId(int)
  • PhoneType(varchar)
  • DateEffective(datetime)
  • AreaCode(varchar) - 如果可能,请不要使用数字以0'
  • 开头
  • PhoneNumber(varchar) - 如果可能的话,不要使用数字从0开始

地址(p_key = CustomerId,AddressType,DateEffective)邮件和物理地址,以及电话等历史记录。

  • CustomerId(int)
  • AddressType(varchar)
  • DateEffective(datetime)
  • Street1(varchar)
  • Street2(varchar)
  • 城市(varchar)
  • 州(varchar)
  • Zip(varchar) - 不要使用数字,因为某些邮政编码以0&#39开头

治疗(p_key = TreamentId)

  • TreatmentId(int)
  • 类型(varchar)

TreatmentStage (p_key = TreamentId,Stage)

  • TreatmentId(int)
  • Stage(int)
  • 描述(varchar)

访问(p_key =所有列)客户可以在同一天进行多个治疗/治疗阶段。

  • CustomerId(int)
  • TreatmentId(int)
  • TreatmentStage(int)
  • DateVisit(datetime)

约会(p_key = CustomerId,AppointmentDate,AppointmentTime)您可以将AppointmentDate和AppointmentTime结合到AppointmentDateTime中,尽管这并不是大多数人会想到的。

  • 类型(varchar)
  • 约会日期(日期)
  • 约会时间(时间)
  • CommentId(int)
  • CustomerId(int)

交易(p_key = TransactionId)

  • TRANSACTIONID
  • 类型(varchar)
  • TransactionTimestamp(datetime)
  • CommentId(int)
  • CustomerId(int)

评论(p_key = CommentId)这会从您的所有其他表格中获取您的自由格式文本,并将其集中在评论中。这将具有性能,因为大多数时候您不需要加载注释,而且数据可能会超过默认页面大小。

  • CommentId(int)
  • 评论(varchar)

代码(p_key = CodeType,代码)

  • CodeType(varchar)
  • 代码(varchar)
  • CodeDescription(varchar)

代码表应存储您的"类型" (ApportionmentType,TransactionType,Phone Type等),因此您有一个代码列表及其描述,如果需要,您可以在连接条件中使用它(报告)。

查询部分非常简单:

SELECT c.*
FROM Visit v
INNER JOIN Customer c
on v.CustomerId = c.CustomerId
WHERE v.DateVisit > DATE_ADD(NOW(), INTERVAL 1 YEAR)