【问题标题】:DB Normalization and lookup tables数据库规范化和查找表
【发布时间】: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


【解决方案1】:

因此,您想存储链接而不添加外键,因为外键会迫使您将其链接为帐户 - 或 - 用户,因为 FK 将指向一个特定的表?

您可以将链接值单独存储在它自己的“查找”表中作为 PK 或使用唯一索引。然后从您的用户、帐户和其他内容中 FK。不过,这将引入共享,您必须添加一些约束以确保如果链接已经在“查找”表中,则无法分配链接。

在查找表上添加多个可为空的 FK 也是可能的,但可能不太通用。添加一个约束以确保至少一个且最多一个 FK 被设置为一个值。

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2016-06-06
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2023-03-17
    • 2021-10-27
    相关资源
    最近更新 更多