如果我有三张桌子:
music_genres
-----------
music_type_id
genres
[other unique fields]
minerals
--------
mineral_id
mineral
[other unique fields]
verbs
-----
verb_id
verbs
[other unique fields]
并填充以下内容:
rock
jazz
funk
punk
rock
boulder
stone
shale
rock
wobble
shake
vibrate
现在假设我正在为每个项目显示一个网页,每个项目使用一个单独的模板,并将此信息存储在下表中:
pages
-----
page_id
page_url
template_url
foreign_key_id
使用以下数据:
/page/music-genres/rock/
/music-genres-template.html
1
/page/verbs/rock/
/verb-template.html
1
/page/minerals/rock/
/mineral-template.html
1
/page/minerals/rock/images/
/mineral-images-template.html
1
模板将知道外键与特定相关表有关,因此知道矿物模板查询该表的其他字段的矿物表。但是,我没有任何参照完整性。如果从矿物表中删除了rock,我不能使用级联删除来从页面中删除行,因为外键不是唯一的。我可以想出许多方法来解决这个问题:
我认为必须有更好的方法来存储我的数据或维护数据库的完整性。有什么想法吗?
答案 0 :(得分:3)
我认为你的问题就在这里
模板会知道a 外键涉及具体 相关表格,
这是未存储在数据库中任何地方的知识。
我看到了两种方法:
鉴于您实际上是为每种类型的“事物”创建单独的表,您应该为引用页面表中相应表的每种类型的事物设置一个不同的列,将所有列设置为null,除了一个(这可以通过约束强制执行)
拥有一个'master things'表,其中包含一个唯一的id,然后页面可以引用该表,同时包含一个用于标识类型的列,以及一个指向其余唯一数据的列,这些列将存储在不同的表。