我的任务是设计一个数据库,为我们公司存储大量信息.因为任务相当大,并且包含多个模块,用户应该可以在这些模块中做一些事情,所以我担心为此设计一个好的数据模型.我只是不想以一个设计糟糕的数据库而告终.
我想有一些不错的合同/账单/订单等数据库 struct 的示例,以便将它们合并到一个很好的关系数据库中.有没有什么资源可以帮助我举一些关于这方面的例子?
我的任务是设计一个数据库,为我们公司存储大量信息.因为任务相当大,并且包含多个模块,用户应该可以在这些模块中做一些事情,所以我担心为此设计一个好的数据模型.我只是不想以一个设计糟糕的数据库而告终.
我想有一些不错的合同/账单/订单等数据库 struct 的示例,以便将它们合并到一个很好的关系数据库中.有没有什么资源可以帮助我举一些关于这方面的例子?
在你开始阅读规范化之前,请先阅读,直到你对它毫无疑问为止.如果你只是在学校里做这件事,你可能还不太了解设计.
仔细收集每个模块的需求.您需要知道:
业务规则(其特定于应用并且必须在数据库中强制实施,因为它们必须在所有记录上强制实施而不管其来源如何),
是否存在法律或监管问题(例如HIPAA或萨班斯-奥克斯利法案要求)
您需要存储哪些数据?为什么(此数据在其他地方可用)
哪些数据只包含一行数据,哪些数据需要包含多行数据?
您打算如何强制每个表中行的唯一性?您有自然键还是需要代理键(几乎所有情况下都建议使用代理键)?
您是否需要复制?
您需要审核吗?
如何将数据输入数据库?它是来自应用程序,一次一个记录(甚至来自多个应用程序),还是来自ETL工具或另一个数据库的批量插入.
您是否需要知道谁输入了记录,以及何时(在企业系统中很可能需要).
您需要什么样的查找表?当您可以使用查找表并将用户限制为值时,数据输入会更加准确.
您需要哪种类型的数据验证?
系统大概有多少条记录?你需要知道创建测试数据的规模.
您打算如何查询数据?您将使用存储过程、ORM还是动态查询?
在你的设计中要记住一些非常基本的事情.为您的数据 Select 正确的数据类型.不要在字符串字段中存储要对其进行数学运算的日期或数字.一定要将不是数学候选的数字(部件号、邮政编码、电话号码等)存储为字符串数据,因为您可能需要前导零.请勿在一个字段中存储多条信息.因此,不要使用逗号连接的列表(这些列表表示需要关联表),如果您发现自己在做一些事情,比如phone1、phone2、phone3,那么请立即停下来设计一个关联表.出于数据完整性的目的,请务必使用外键.
一直通过你的设计考虑数据完整性.没有完整性的数据是毫无意义和无用的.进行性能设计,这在数据库设计中是至关重要的,不是过早的优化.数据库不容易重构,所以第一次正确处理性能方程中最关键的部分很重要.事实上,所有数据库都需要为数据完整性、性能和安全性而设计.
不要害怕有多个连接,正确地索引这些连接将会执行得很好.不要试图将所有内容都放入实体值类型表中.尽量少用这些.试着学会从处理数据集的Angular 来思考,这将有助于您的设计.对数据库进行了优化,以便以集合的方式进行操作.
还有更多,但这足以开始消化.