0

DBの考え方をいくつか行い、リンクテーブルなどの基本的なテーブルを用意します。リンクは、アカウント オブジェクト/レコードを指す外部キーを持つことができます。lookupsただし、単純化と抽象化 (たとえば、リンクをコンテンツベースのリソースとして扱う) のために、一般的なルックアップ テーブル (たとえば、 、notaccount_linksまたはと呼ばれる) を介してリンクをアカウントに割り当てると考えましたlink_accounts

リンクは1 つのアカウントにのみ割り当てることができますが (常に 1 つのアカウントに割り当てる必要があります)、inner-me はその外部キーを作成したいと考えています。

しかし、私はオブジェクト/データリソースを抽象化し、そのコンテキストを分離するという概念が本当に好きです (たとえば、アカウントやユーザーなどに割り当てられます)。

誰かがemを持っていれば、いくつかの考えをいただければ幸いです:)

スキーマ:

リンク:

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';
4

1 に答える 1

1

FK が 1 つの特定のテーブルを指しているため、外部キーの原因を追加せずにリンクを保存して、アカウントまたはユーザーをリンクする必要がありますか?

リンク値だけを独自の「ルックアップ」テーブルに PK として、または一意のインデックスと共に格納できます。次に、ユーザー、アカウントなどから FK します。ただし、これにより共有が導入されますが、リンクが既に「ルックアップ」テーブルにある場合、リンクを割り当てることができないようにするために、いくつかの制約を追加する必要があります。

ルックアップ テーブルに複数の null 許容 FK を追加することも可能ですが、おそらくあまり一般的ではありません。制約を追加して、少なくとも 1 つ、多くても 1 つの FK が値に設定されるようにします。

于 2011-06-27T02:03:15.023 に答える