我正在创建我的第一个数据库,以帮助我整理我即将开始的直接邮件活动的潜在客户。我对创建数据库知之甚少,但请查看我当前的设置并提供反馈
我有三个父表:
LeadHeader
MailHeader
Campaign
我有三个子表:
LeadDetails
MailDetails
CampaignDetails
以下是我的表格:
LeadHeader
Guid (Unqiue identifier)
LeadType (Bankruptcy, NOO OOS, Empty Nesters, inheritance)
LeadSource (Driving For Dollars, Cold Calling, ListSource)
FirstName
LastName
Street
HouseNumber
City
State
Phone
MailingInd (Y/N)
CampaignName (Name of campaign from the MailHeader table)
ResponseInd (Y/N)
AppointmentInd (Y/N)
AcceptedOfferInd (Y/N)
LeadDetail
Guid (Unqiue identifier)
ParentLeadGuid (Links to the Parent Table LEADERHEADER)
Year Built
Purchase Date
Bedrooms
Bathrooms
AssessedValue
Response
Response Date
Notes
MailHeader
Guid (Unqiue identifier)
CampaignName (Name of campaign from the MailHeader table)
CampaignStartDate
CampaignEndDate
NumberOfMailings (Total number of mailings)
ResponseIND
MailDetail
ParentGuid (Links to the Parent Table MailHeader)
Guid (Unqiue identifier)
MailingNumber (1st,2nd,3rd,4th,ect)
MailingDate (**/**/****)
MailType (Postcard, Letter)
MailMessage
ResponseID (Unqiue identifier for responses since there can be multiple)
Response (Message of response)
广告系列
Guid (Unqiue identifier)
CampaignName
CampaignStartDate
CampaignEndDate
NumberofLeadsMailed
NumberofCallsReceived
AcceptedOfferInd (Y/N)
AcceptedOfferNumber (7)
AppointmentInd (Y/N)
ApointmentNumber (20)
Campaigndetails
Guid (Unqiue identifier)
ParentGuid (Links to the Parent Table Campaign)
PositiveCalls (Leads to in person meeting)
NetrualCalls (Inquiring Information but not meeting. Not angry)
NegativeCalls (People who don't want to be contacted)
AppointmentID
ApointmentNotes
AcceptedOfferID
AcceptedOfferNotes
感谢您的任何反馈!!!
答案 0 :(得分:0)
您的目标主要是不重复输入信息,这样当您更改某些内容(例如广告系列名称)时,您无需在使用该名称的任何位置更改它。
也就是说,在不知道您的实际数据是什么样的情况下,我的建议会有所限制,并且可能不适用。但是,为实现上述目标,我会做出一些改变。
首先,我会创建以下" child"表:
<强> LeadType 强>
LeadTypeID int PK
LeadTypeDescription varchar(50)
_With data:_
1 'Bankruptcy'
2 'NOO OOS'
3 'Empty Nesters'
4 'Inheritance'
<强> LeadSource 强>
LeadSourceID int PK
LeadSourceDescription varchar(50)
_With data:_
1 'Driving For Dollars'
2 'Cold Calling'
3 'ListSource'
广告系列强>
CampaignID GUID PK
CampaignName varchar(50)
CampaignStartDate date
CampaignEndDate date
NumberofLeadsMailed smallint
NumberofCallsReceived smallint
AcceptedOfferInd bit
AcceptedOfferNumber smallint
AppointmentInd bit ??
ApointmentNumber smallint ??
然后使用对这些表的引用来代替原始表中的引用。即LeadHeader.CampaignName
这看起来与您对Campaign
表的意图相同,只需要包含与该广告系列相关的所有信息(根据需要使用适当的链接),然后引用{{1}从那张桌子。
其次,确保在输入记录时不必复制任何其他信息。例如,如果您可以为广告系列进行多次约会,则可能需要一个单独的GUID
表,其中包含相关数据。
第三,我不知道您使用的数据库,但要确保列的数据类型合适。是/否是Appointments
或boolean
。保存地址的字段不需要是10个字符。 bit
数据类型是固定宽度的,而char
数据类型是可变长度的。考虑您将拥有多少数据以及可以为该数据库分配多少空间。根据您拥有的数据类型,您可能必须使用varchar
等。
第四,不要对你的数据做太多假设。一个人的名字并不总是由人物组成。 &#39;约翰史密斯&#39;和John O&#39;史密斯&#39;一样有效。和Johnny5 O&#39; Smith&#39;一样有效。此外,您的nvarchar
赢了也不一定总是一个数字。 &#39;贴切。图3B&#39;是一个有效的门牌号码。
第五,在列中留出足够的空间,但不要太多。您可以安全地做出的假设之一就是您可能不需要houseNumber
字段FirstName
或甚至可能不varchar(max)
。您必须根据您的预期用途来判断哪些是合适的。
第六,您不必提前将其放置到位,但要注意您在极端扩张或搬迁时可能需要做出的改变。如果您获得了一百万新用户,您的数据库是否会扩展?如果您的系统迁移到日本怎么办?
第七,时间。确定您希望日期的来源。我的建议是使用UTC,然后您可以随时轻松地从您的位置计算您的显示器。但同样,这将取决于您的数据和期望。只要确保如果你搬到不同的时区,就不要让自己受伤。并且不要忘记储蓄时间或闰时的怪癖。时间可能是一个主要问题。
构建数据库时还有许多其他注意事项。并且您的结构可能会随着您的构建而变化,甚至在您开始使用之后也会发生变化。
TL; DR: &#34;数周的编程可以为您节省数小时的计划时间。&#34; &gt; https://www.amazon.com/Weeks-programming-hours-planning-T-Shirt/dp/B071NYC13G