sql - 记录链接到任何表?

标签 sql key

嗨,我对此有些挣扎,可以使用一些想法......

假设我的数据库有以下表格;
顾客
供应商
销售发票
购买发票
货币

等等等等

我希望能够将“注释”记录添加到任何类型的记录

Notes 表是这样的

NoteID        Int (PK)
NoteFK        Int
NoteFKType    Varchar(3)
NoteText      varchar(100)
NoteDate      Datetime

其中 NoteFK 是客户或供应商等的 PK,而 NoteFKType 表示该注释所针对的记录类型

现在我意识到我无法添加一个引用多个表的 FK,而 NoteFK 不需要出现在所有表中。

那么你将如何设计上述内容?
注释 FK 需要在上述任何表格中

干杯,
丹尼尔

最佳答案

您必须接受这样的限制,即您无法教授数据库有关此外键约束的信息。因此,您将不得不进行完整性检查(和级联删除)。

你的设计很好。
它很容易扩展到额外的表,每个实体可以有多个注释,目标表甚至不需要知道注释功能。

这种设计相对于每个实体表使用单独的笔记表的一个优点是,您可以轻松地跨所有笔记运行查询,例如“最近的笔记”或“由给定用户创建的所有笔记”。

至于那个表增长太大的论点,将它拆分为五个表会将表缩小到其大小的五分之一左右,但这不会对基于索引的访问产生任何影响。数据库是为处理大表而构建的(只要它们被正确索引)。

关于sql - 记录链接到任何表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1177091/

相关文章:

sql - 为什么 like-operator 这么快

mysql - 执行查询但没有显示数据 - MySQL

mysql - 在 MySql/DQL(symfony 查询构建器)中选择 id 及其计数

java - DataNucleus JDO 实现中的复合键(字段 jdoStateManager)

json - 如何使用 jq 将多个输出对象组合成一个对象

java - Hibernate:奇怪的异常

mysql - 如何更改 INNER JOIN 后收到的列的名称

java - 将 XML 解析为 Hashmap Java

python - 从键列表中获取字典中的所有值,其中相同的键多次出现

c++ - c++中如何实现“按下进入”