【发布时间】:2022-01-11 20:32:30
【问题描述】:
这是我关于堆栈溢出的第一个问题,我是一名全栈开发人员,我使用以下堆栈:Java - spring - angular - MySQL。我正在做一个附带项目,我有一个数据库设计问题。
我有一些在多个表之间共有的信息,例如:
- 文档信息(最初可用于 FOLDER 和 CONTRACT 表)。
- 类型信息(表:COURT、FOLDER、OPPONENT,...)。
- 状态(表格:合同、文件夹...)。
- 地址(表:OFFICE、CLIENT、OPPONENT、COURT,...)。
为了避免重复并将核心表与“技术”表(可在许多表中使用的信息)耦合。我正在考虑将“技术”表合并到一个功能表中。例如,我们可以有一个包含以下列的通用 DOCUMENT 表:
- 身份证
- 标题
- 描述
- 创建日期
- TYPE_DOCUMENT(文件夹、合同...)
- OBJECT_ID(TYPE_DOCUMENT 表的主键)
- OFFICE_ID
- PATT_DATA
例如,我们可以使用以下查询检索有关文档的信息:
SELECT * FROM DOCUMENT WHERE OFFICE_ID = "office 1 ID" AND TYPE_DOCUMENT = "CONTRACT" AND OBJECT_ID= "contract ID";
我们还可以使用以下索引来优化查询: CREATE INDEX idx_document_retrieve ON DOCUMENT (OFFICE_ID, TYPE_DOCUMENT, OBJECT_ID);
我的问题是:
- 这是个好设计吗?
- 有没有更好的方法来实现这个设计。
- 我应该只使用普通的数据库设计吗,例如一个文件夹可以 有很多文档,所以我创建了一个 folder_document 表 folder_id 作为外键。并对所有表格执行相同操作。
非常欢迎任何建议或注释,并提前感谢您的帮助。
【问题讨论】:
标签: mysql sql database generics database-design