人们如何创建可重用的数据库?

时间:2009-04-21 17:56:12

标签: database product accounting

人们如何制作可用于许多产品的可重用数据库?

例如,如果我们有一个专为学校设计的数据库......是否可以轻松修改以提供给大学?

创建可用作产品的数据库的方法是什么?通过一次编码为许多客户提供解决方案?

由于

11 个答案:

答案 0 :(得分:3)

通常,当人们这样做时,他们在同一行业中拥有多个客户。因此,如果您是电子商务Web开发人员,那么您将反复运行相同的产品,订购,订购详细信息类型的表格方案。当发生这种情况时,构建一个入门数据库是一件轻而易举的事。

答案 1 :(得分:2)

这没有简单的银弹。你只需要保持你的数据库设计足够通用,但要尽量避免过度泛化,因为这通常会导致维护中的噩梦和其他令人讨厌的陷阱。

凭借经验,您将开始欣赏广义与专业之间的完美平衡。这是可理解和可重用的代码/数据库设计的关键。

答案 2 :(得分:1)

答案是找到sweet spotabstraction

答案 3 :(得分:1)

第一步,与各种各样的潜在客户交谈,了解他们的需求,他们目前使用的是什么以及他们希望他们当前的产品能做些什么。您认为自己现在需要花费10倍的时间。在纸上绘制一个潜在的图形用户界面,让面试的人查看图纸并提出建议。如果可能的话,聘请业内的一些人作为业务分析师来帮助完成这一步骤。询问法律要求。有些行业有很多法律上的复杂问题而有些则没有。任何与医学界有关的事情,你都需要研究并完全理解HIPPA的要求。

设计数据库结构和GUI然后让一些真正的用户使用它。根据他们所说的内容进行重构(令人惊讶的是,在面对实际的GUI之前,用户在需求收集中遗漏了多少内容,而这些内容是他们没有想到的。)

考虑所有潜在客户需要共同的内容以及您可能需要定制的位置 - 您的访谈应该在此指导您。决定如何处理自定义。或者即使你允许它。这可能在很大程度上取决于行业以及他们的实践标准。

如果这是盒子软件,通常设计包括一个带有可自定义字段的表格,可以由用户添加到表格和报告中。

在基于Web的解决方案中,通常每个想要自定义的用户都可以拥有自己的数据库来存储自定义信息(以及用于非自定义事物的中央standrad数据库),程序员可以根据客户端的请求进行更改。如果您采用这种方法,第二次为第二个客户端进行simliar自定义时,请考虑是否需要重构以使其成为每个人都可以使用的软件的新功能。当客户可以以较少的资金获得标准报告时,无需编写17个自定义出勤报告,这些报告仅由一个或两个字段组成。

在Web模型中,您还可以创建一组模块,让客户端选择要添加到其自定义解决方案中的模块。他们会根据他们选择的模块的数量和复杂程度付费。因此,只需要三个标准报告的客户支付的费用将低于想要全部27个的客户。当建议新的自定义时,如果建议似乎不适用于其他人,则客户支付开发费用,但模块这样做是为了让其他人也能买到它。如果其他人购买它,请求更改的原始客户可能会获得部分资金,直到他们支付开发费用。他们还可能要求将某些东西保留为自定义模块,并为此工作支付更高的价格。我们有一些客户甚至不希望他们的数据位于与其他客户相同位置的相同服务器上。不用说,我们为这样的事情收取巨额费用。

定制很昂贵,可能会导致需要更多的程序员。在你去定制路线之前要非常强烈地考虑。它实际上可以销售您的软件解决方案,但它不能很好地扩展。当你有十个cutomer时,它并不坏,但当你有几百个时,它可以很快失控。一旦提供定制,退出定制要比从标准套件中添加定制要困难得多。在组织公司报告时,通常需要定制。如果您可以创建报告界面,人们可以选择他们想要的信息并保存他们自己的自定义报告,那么您可以处理行业中的大多数自定义需求,而无需进行全面的自定义。

答案 4 :(得分:0)

我能给出的最好建议就是建立最低标准......

所以....把它编码为一个面向教育设施的项目: - )

答案 5 :(得分:0)

花时间考虑要存储的数据类型,抽象它以使其可扩展,然后相应地构建数据库。我不知道你是否可以从代码中获得完美的重用方式,但是你可以构建一个数据库结构(你仍然需要修改单个组件),如果你提前计划,它是可重用的。

答案 6 :(得分:0)

这取决于您的需求。例如,许多基于产品的业务数据库使用的格式包括:

  • 客户表
  • 订单表
  • 产品表等

在你的情况下你可能有

  • 班级表
  • 学生表
  • 成绩表等

这种通用表格格式可以在许多应用程序中重用。

答案 7 :(得分:0)

这一切都在设计中。在许多(如果不是大多数)案例中,数据库需要为个别机构进行某种程度的定制;但是通用数据库可以提供基本级别的功能。有可能设计出足以满足许多基本需求的东西;但问题是设计的普遍性往往导致高复杂性。例如,您可以将数据库设计为数据驱动,以满足大量潜在用户需求;但通常情况下,最好根据机构的个人需求定制架构。

在设计可重用性方面存在重大权衡;通常它们涉及时间和复杂性;也就是说,设计一些不可重复使用的东西更容易;通常,在进行一般设计和使用它时所花费的额外时间是不值得的。

答案 8 :(得分:0)

在数据库设计中找到通用性和特异性之间的正确平衡,以便围绕它构建的应用程序能够解决目标市场中的足够问题,而这些问题将全部纳入其中。

答案 9 :(得分:0)

此类应用程序需要相当复杂的数据模型来满足要求。不同种类的学校会有不同的要求。大学可能会让你添加或删除课程,但小学通常不会。大学需要安排课程进入房间,而小学需要根据可用空间和教师将学生分成不同年级并将成绩分成教室。

您的设计需要考虑预期要解决的所有要求,然后实施这些要求。您使程序越通用,就越难以满足您的客户。问题是“写一次代码”。如果您想编写一个解决每个学校需求的程序,它将需要数百个功能;在某些情况下,一些学校需要另一所学校的相反功能;例如,一些学校需要在每个学科或教室强制执行一名教师,而另一所学校可能需要多名教师。您期望满足的要求越多,应用程序就越复杂。

在行业中,大型应用程序倾向于编写,以便可以扩展;提供了一组核心功能,但该应用程序旨在为特定客户进行更改和定制。这使得开发更容易,因为您不需要预测所有需求;事实上,在您有满足这些需求的客户之前,您不需要预测很多需求。但是通过“自定义”,您不会只编写一次代码。

最重要的一步是提出一个足够灵活的数据模型,以便以后扩展,但不是那么灵活,以至于无法开发。最难的部分通常是使关系的基数正确。例如,您可能会说一个班级有一位老师。然后,当一个类需要两个教师时,你必须重写大量代码并修复大量数据。这些变化令人烦恼且耗时。但是,最终你可以在程序员有足够时间的情况下修复错误。

答案 10 :(得分:0)

每个客户是否会使用所有功能,或者您是否正在尝试构建一个适合所有产品的产品?我总是发现,计划和修改数据库以适应特定应用程序所花费的额外时间将来会有所回报。使用简洁的数据库结构比尝试考虑每种可能性的数据库结构要容易得多。

如果我有一个类似的现有数据库或模板,我通常使用像this这样的数据库建模工具来修改它,然后使用生成SQL功能(在加载/保存下)来创建实际的数据库。

我最近选择的另一个伎俩是节省了大量时间,用于保存用于生成数据库的SQL作为脚本。如果我想设置一个新的数据库,我对源代码进行任何编辑,然后加载页面。例如,如果我想生成新的客户表,请加载 http://localhost/load.php?generate=customer

希望它有所帮助!