我是数据库的新手,所以如果这是一个基本问题,请原谅我。
我试图解析一个复杂的开源字典,并将数据输出到一个同样复杂的 Access 数据库中:
我了解如何将数据插入到表中,但我不明白的是如何将数据插入到彼此依赖外键的多个表中。举个简单的例子:
我有三个表:Entry
,Keyword
,和Keyword_Priority
。每个条目可以有多个关键字,因此该Keyword
表Entry
通过外键链接回。并且每个关键字元素可以有多个元素来描述关键字的优先级,因此该Keyword_Priority
表Keyword
通过外键链接回,如下所示:
在这个简化的场景中,假设我想使用 SQL 创建一个新条目。我从哪里开始?我:
先插入Entry
表创建一个新的EntryID
然后Keyword
使用新的EntryID
作为外键插入到表中
然后Keyword_Priority
使用关键字的ID
字段作为外键插入到表中
或者,我应该反过来做吗...
插入Keyword_Priority
表格
插入Keyword
表格
插入Entry
表格
总结一下,我的问题是:
一次将数据插入多个表时应该从哪里开始?自上而下,还是自下而上?
外键与另一个表的主键相关。当输入带有外来的记录时,必须存在带有该主键的对应记录。因此,您必须始终从在关系的 1 侧(主键或父键或主键表)的表中插入开始。然后只有您可以在关系的 n 侧输入记录(进入明细表或子表或外键表)。
顺序:1. 条目,2. 关键字,3. Keyword_Priority。
如果一个表有多个外键,则必须首先输入所有其他表中具有相应主键的相关记录。例如,在将记录输入到 之前,必须已插入SenseRestricted...
相应的记录 inSense
和 in Reading
。
一些一般性建议。在图像中,我猜 Keyword_Priority 依赖于依赖于 Entry 的 Keyword。因此,您需要从 Entry 开始,然后是 Keyword 等。
从建模的角度来看,无论您在模型中的哪个位置使用它,某物都是某种东西。该条目看起来相当不错:
CREATE TABLE entry
( EntryId ... NOT NULL PRIMARY KEY
, ...
);
Run Code Online (Sandbox Code Playgroud)
对于关键字,例如:
CREATE TABLE keyword
( KeywordId ... NOT NULL PRIMARY KEY
, ...
, EntryId ... REFERENCES entry (EntryId)
)
Run Code Online (Sandbox Code Playgroud)
即不使用Id,它太模糊了。该属性是特定事物的 id。另外,请注意属性 EntryId 的命名方式与条目中的相似。
我不会深入研究代理键的问题,因为我相信 ms-access 存在限制(至少过去是这样),这会阻止复合外键。
归档时间: |
|
查看次数: |
1639 次 |
最近记录: |