我不太清楚怎么说这个,所以我举个例子。我有一个程序从用户定义的csv文件读入它的数据库表。 (我在Python中使用SQLite。)
假设我们有桌子:
个人资料(
profile_name TEXT,
分区文字,
分享真实
PRIMARY KEY(profile_name,zoning),
的)
ProfileAssign(
地理TEXT,
今年INTEGER,
PROFILE_NAME TEXT,
主要关键(地理,年),
外国地理参考地理参考地理
的)
我们希望每个地理区域都有相关的分区配置文件。现在说我们还想确保用户不会为地理位置分配不存在的配置文件,即我们希望在 ProfileAssign 表中有一个外键约束:
FOREIGN KEY profile_name REFERENCES个人资料
现在很明显这不可能发生,因为profile_name不是Profile表的主键。我的解决方案是创建一个单独的表,我们可以在其上创建一个外键引用:
个人资料列表(
PROFILE_NAME TEXT,
PRIMARY KEY(profile_name)
的)
这对用户来说非常烦人,因为他们不仅需要定义这些配置文件,他们现在必须在单独的文件中列出所有名称。任何想法如何规避这个?
答案 0 :(得分:1)
外键需要在父表中标识一行。 这通常使用主键完成,但任何其他唯一键也可以使用;唯一的要求是强制执行唯一性(使用UNIQUE约束):
CREATE TABLE Profile (
profile_name TEXT UNIQUE,
zoning TEXT,
...
PRIMARY KEY (profile_name, zoning)
);
CREATE TABLE ProfileAssign (
...
FOREIGN KEY profile_name REFERENCES profile(profile_name)
);