【发布时间】:2011-06-27 10:34:33
【问题描述】:
做一些数据库思考,并有一个基本表,例如链接表。
链接可以有一个指向帐户对象/记录的外键。但是,为了简单和抽象(例如,将链接视为基于内容的资源),我想我会通过通用查找表将链接分配给帐户(例如,称为 lookups,而不是 @987654322 @ 或 link_accounts)。
虽然链接只能分配给一个帐户(并且必须始终分配给一个帐户),但内在的我想要创建那个外键。
但我真的很喜欢抽象出一个对象/数据资源并解耦它的上下文的概念(例如,它被分配给一个帐户、一个用户或其他任何东西)。
如果有人得到他们的想法,将不胜感激:)
模式:
链接:
CREATE TABLE `links` (
`link_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`timestamp_updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`timestamp_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
`type` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`description` longtext COLLATE utf8_unicode_ci NOT NULL,
`resource` longtext COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`link_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Links';
查找:
CREATE TABLE `lookups` (
`lookup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`timestamp_updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`timestamp_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
`type` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`source_node_type` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`source_node_id` int(10) unsigned NOT NULL,
`target_node_type` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`target_node_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`lookup_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Obejct Assignments';
【问题讨论】:
-
一个例子比一个挥手的描述更好。请提供一些示例表或查询或其他具体内容。
-
或者至少有一些架构可以使用。
标签: database database-design normalization database-normalization