如果我有三个表:
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
模板将知道外键与特定的相关表相关,因此矿物模板知道查询该表的其他字段的矿物表。但是,我没有任何参照完整性。如果从矿物表中删除岩石,我不能使用级联删除从页面中删除行,因为外键不是唯一的。我可以想出很多方法来解决这个问题:
- 使用触发器模拟级联删除
- 将项目类型存储在 music_types、矿物和动词表的每一行中,并使用它作为额外的外键
- 在 pages 表中存储适当的表名
- 使用 PHP 等维护数据库的完整性。
我认为必须有更好的方法来存储我的数据或维护数据库的完整性。有什么想法吗?