我想知道在设计查找表时是否有更好的做法或任何原则。
我打算设计一个抽象查找表,它可以满足不同的情况。
例如,我将查询表称为masters and slaves
表,
CREATE TABLE IF NOT EXISTS `masters_slaves` (
`mns_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`master_id` varchar(255) DEFAULT NULL COMMENT 'user id or page id',
`slave_id` varchar(255) DEFAULT NULL COMMENT 'member id or user id or page id',
`cat_id` varchar(255) DEFAULT NULL COMMENT 'category id',
`mns_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`mns_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`mns_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
所以这个查找表可以服务于这些类型的关系,如
Admins and Members
Admins and Pages
Admins and Posts
Post Categories and Posts
Page Parents and Pages
etc
cat_id
表格中的masters and slaves
将描述和区分这些类别。例如,cat_id
1
是管理员和成员等等。
我会插入:
master_id
和成员ID进入
slave_id
列master_id
和子页面ID进入
slave_id
列master_id
和页面ID进入
slave_id
列但我确信无论我是否应该这样做:
感谢。
答案 0 :(得分:4)
听起来非常像反模式 One True Lookup Table 。谷歌吧!
以下是我在不到1分钟内提出的不良事项清单:
我可以轻松拿出更多,但我认为不是真的需要;)
当一个人没有太多的数据库经验时,感觉做一件好事,重用东西并使用“常见”结构,但数据库很少从中受益。
为您的人际关系使用单独的表格。最后,无论如何你都会这样做。
答案 1 :(得分:1)
根据我的经验,最好为每个类别创建一个查找表。 以下是我看到的好处:
我认为有一些小桌子而不是一张大桌子会有更多优点。