人们如何制作可用于许多产品的可重用数据库?
例如,如果我们有一个为学校设计的数据库......可以轻松修改以提供给大学吗?
创建一个可以用作产品的数据库的方法是什么,只需一次编码就可以为许多客户提供解决方案?
谢谢
人们如何制作可用于许多产品的可重用数据库?
例如,如果我们有一个为学校设计的数据库......可以轻松修改以提供给大学吗?
创建一个可以用作产品的数据库的方法是什么,只需一次编码就可以为许多客户提供解决方案?
谢谢
通常,当人们这样做时,他们在同一行业中有多个客户。因此,如果您是电子商务 Web 开发人员,那么您将一遍又一遍地运行相同的产品、订单、订单详细信息类型的表格场景。发生这种情况时,构建入门数据库是轻而易举的事。
这没有简单的灵丹妙药。你只需要保持你的数据库设计足够通用,但尽量避免过度概括,因为这通常会导致维护中的噩梦和其他令人讨厌的陷阱。
随着经验的积累,您将开始体会到泛化和专业化之间的完美平衡。这是可理解和可重用的代码/数据库设计的关键。
第一步,与各种各样的潜在客户交谈,了解他们的需求、他们目前正在使用什么以及他们希望他们当前的产品能做什么。在这方面花费 10 倍于你认为你现在需要的时间。在纸上画出潜在的 GUI,让您采访的人查看图纸并提出建议。如果可能的话,请聘请一些业内人士作为业务分析师来帮助完成这一步。询问法律要求。一些行业有很多法律合规问题,而另一些则没有。例如,任何与医学界相关的事物,您都需要研究并充分了解 HIPPA 要求。
设计数据库结构和 GUI,然后让一些真正的用户使用它。根据他们所说的进行重构(令人惊讶的是,用户在需求收集中遗漏了许多他们直到面对实际 GUI 才想到的东西)。
想想所有潜在客户的共同点以及您可能需要定制的地方——您的采访应该在这里为您提供指导。决定如何处理定制。或者即使你允许。这可能在很大程度上取决于行业以及他们的做法有多标准。
如果这是盒式软件,通常设计包括一个带有可自定义字段的表格,用户可以将这些字段添加到表单和报告中。
在基于 Web 的解决方案中,通常每个想要定制的用户都可能有自己的数据库来存储定制信息(以及用于不可定制事物的中央标准数据库),并且程序员根据客户的请求进行更改。如果您采用这条路线,那么在您第二次为第二个客户端进行类似的定制时,请考虑是否需要重构以使该软件的新功能可供所有人使用。当客户可以用更少的钱获得标准报告时,无需编写 17 个仅由一两个字段变化的自定义考勤报告。
在 Web 模型中,您还可以创建一堆模块并让客户选择添加到他们的自定义解决方案中的模块。他们将根据他们选择的模块的数量和复杂性付费。因此,只想要三个标准报告的客户将比想要全部 27 个的客户支付更少的费用。当提出新的定制建议时,如果该建议似乎没有立即适用于其他人,那么客户支付开发费用,但是模块这样做是为了让其他人也可以购买它。如果其他人购买它,要求更改的原始客户可能会获得部分资金,直到支付他们的开发成本。他们还可能要求将某些东西保留为自定义模块,并为这项工作付出更高的代价。我们有一些客户不 甚至不希望他们的数据与其他客户位于同一位置的同一台服务器上。不用说,我们会为做这样的事情收取巨额费用。
定制是昂贵的,并且可能导致需要更多的程序员。在您走定制路线之前,请认真考虑。它确实可以销售您的软件解决方案,但它不能很好地扩展。当你有十个客户时这还不错,但是当你有几百个客户时,它很快就会失控。一旦你提供了定制,就比以后从标准套件中添加定制要困难得多。通常,在企业报告的组织中更需要定制。如果您可以创建一个报告界面,人们可以在其中挑选和选择他们想要的信息并保存他们自己的自定义报告,那么您可以处理行业中的大部分自定义需求,而无需进行全面的自定义。
我能给出的最好建议是建立最低的公分母......
所以....将其编码为面向教育设施的项目:-)
花时间考虑您要存储的数据类型,将其抽象以使其可扩展,然后相应地构建您的数据库。我不知道您是否可以像从代码中那样获得完美的重用,但是如果您提前计划,您可以构建一个可重用的数据库结构(您仍然需要修改各个组件)。
这取决于您的需求。例如,许多基于产品的业务数据库使用的格式包括:
在你的情况下,你可能有
这种通用表格格式可以在许多应用程序中重复使用。
这一切都在设计中。在许多(如果不是大多数)情况下,数据库需要针对个别机构进行某种程度的定制;但是通用数据库可以提供基本的功能级别。可以设计出足够通用的东西来满足许多基本需求;但问题是,设计的通用性往往会导致高度复杂性。例如,您可以将数据库设计为数据驱动的,以满足大量潜在用户需求;但通常情况下,最好根据机构的个人需求定制架构。
在设计可重用情况时需要进行重大权衡;通常它们涉及时间和复杂性;即,设计不可重用的东西更容易;通常,在进行一般设计和使用它时所涉及的额外时间是不值得的。
在您的数据库设计中找到一般性和特殊性的适当平衡,以便您围绕它构建的应用程序可以解决目标市场中的足够问题,他们都会购买它。
像这样的应用程序需要一个相当复杂的数据模型来满足要求。不同类型的学校会有不同的要求。大学可能允许您添加或删除课程,但小学通常不会。大学需要将课程安排到房间,而小学需要根据可用空间和教师将学生分成年级并将年级分成教室。
您的设计需要考虑预期要解决的所有要求,然后实施这些要求。您使程序越通用,就越难以满足您的客户。问题是“编写一次代码”。如果你想编写一个程序来解决每个学校的需求,它需要数百个功能;在某些情况下,一些学校需要与另一所学校相反的功能;例如,一些学校需要每个学科或每个教室强制一名教师,而另一所学校可能需要多名教师。您期望满足的要求越多,应用程序就越复杂。
在工业中,大型应用程序倾向于编写以便可以扩展;提供了一组核心功能,但该应用程序旨在针对特定客户进行更改和定制。这使得开发更容易,因为您不需要预测每一个需求;事实上,在您拥有满足这些需求的客户之前,您无需预测许多需求。但是通过“定制”,您不会只编写一次代码。
最重要的一步是提出一个足够灵活的数据模型,可以在以后进行扩展,但又不会灵活到无法开发的程度。最难的部分通常是让关系的基数正确。例如,您可能会说一个班级有一位老师。然后当一个班级需要两个老师时,你必须重写大量代码并修复大量数据。这些类型的更改令人讨厌且耗时。但是,最终,只要有足够的程序员时间,您总是可以修复错误。
每个客户都会使用所有功能,还是您正在尝试构建一种适合所有产品的尺寸?我一直发现,为适应特定应用程序而花费额外的时间来规划和修改数据库会在未来得到回报。使用简洁的数据库结构比尝试考虑所有可能性的数据库结构要容易得多。
如果我有一个类似的现有数据库或模板,我通常使用这样的数据库建模工具来修改它,然后使用生成 SQL 功能(在加载/保存下)来创建实际的数据库。
我最近学到的另一个为我节省了大量时间的技巧是将用于生成数据库的 SQL 保存为脚本。如果我想建立一个新的数据库,我对源代码进行任何编辑,然后加载页面。例如,如果我想生成一个新的客户表,我会加载http://localhost/load.php?generate=customer。
希望能帮助到你!