我的任务是设计一个数据库,为我们公司存储大量信息.因为任务相当大,并且包含多个模块,用户应该可以在这些模块中做一些事情,所以我担心为此设计一个好的数据模型.我只是不想以一个设计糟糕的数据库而告终.

我想有一些不错的合同/账单/订单等数据库 struct 的示例,以便将它们合并到一个很好的关系数据库中.有没有什么资源可以帮助我举一些关于这方面的例子?

推荐答案

在你开始阅读规范化之前,请先阅读,直到你对它毫无疑问为止.如果你只是在学校里做这件事,你可能还不太了解设计.

仔细收集每个模块的需求.您需要知道:

业务规则(其特定于应用并且必须在数据库中强制实施,因为它们必须在所有记录上强制实施而不管其来源如何),

是否存在法律或监管问题(例如HIPAA或萨班斯-奥克斯利法案要求)

您需要存储哪些数据?为什么(此数据在其他地方可用)

哪些数据只包含一行数据,哪些数据需要包含多行数据?

您打算如何强制每个表中行的唯一性?您有自然键还是需要代理键(几乎所有情况下都建议使用代理键)?

您是否需要复制?

您需要审核吗?

如何将数据输入数据库?它是来自应用程序,一次一个记录(甚至来自多个应用程序),还是来自ETL工具或另一个数据库的批量插入.

您是否需要知道谁输入了记录,以及何时(在企业系统中很可能需要).

您需要什么样的查找表?当您可以使用查找表并将用户限制为值时,数据输入会更加准确.

您需要哪种类型的数据验证?

系统大概有多少条记录?你需要知道创建测试数据的规模.

您打算如何查询数据?您将使用存储过程、ORM还是动态查询?

在你的设计中要记住一些非常基本的事情.为您的数据 Select 正确的数据类型.不要在字符串字段中存储要对其进行数学运算的日期或数字.一定要将不是数学候选的数字(部件号、邮政编码、电话号码等)存储为字符串数据,因为您可能需要前导零.请勿在一个字段中存储多条信息.因此,不要使用逗号连接的列表(这些列表表示需要关联表),如果您发现自己在做一些事情,比如phone1、phone2、phone3,那么请立即停下来设计一个关联表.出于数据完整性的目的,请务必使用外键.

一直通过你的设计考虑数据完整性.没有完整性的数据是毫无意义和无用的.进行性能设计,这在数据库设计中是至关重要的,不是过早的优化.数据库不容易重构,所以第一次正确处理性能方程中最关键的部分很重要.事实上,所有数据库都需要为数据完整性、性能和安全性而设计.

不要害怕有多个连接,正确地索引这些连接将会执行得很好.不要试图将所有内容都放入实体值类型表中.尽量少用这些.试着学会从处理数据集的Angular 来思考,这将有助于您的设计.对数据库进行了优化,以便以集合的方式进行操作.

还有更多,但这足以开始消化.

Database相关问答推荐

MongoDB事务,回调API方法

如何正确创建mongo模型和客户端?

使用 prisma ORM 在我的迁移中手动添加触发器

java嵌入式库磁盘键值数据库

数据库中的每个表都应该有一个 SQLiteOpenHelper 吗?

如何在 SQL Server 中将索引从一个表复制到另一个表

NOSQL 非规范化数据模型

多列索引的顺序

mysql搜索表名的段

用 Python 永久存储字典的优雅方式?

MySQL 数据库中列名中的连字符

如何在远程服务器上备份 MySQL 数据库?

表模块与域模型

MySQL 错误 - #1062 - Duplicate entry ' ' for key 2

SQL - 如何转置?

如何处理数据库中用户的身份验证/授权?

日期格式的 Oracle SQL 查询

使用批处理文件执行一组 SQL 查询?

如何使用 JPA 注释创建连接表?

从 SQLite 导出到 SQL Server