DB思考をいくつか行い、リンクテーブルなどの基本テーブルを持っています。 リンクには、アカウントオブジェクト/レコードを指す外部キーがある可能性があります。しかし、単純化と抽象化(例えば、コンテンツベースのリソースとしてのリンクの扱いなど)のために、一般的なルックアップテーブル(例えば、account_links
またはlink_accounts
ではなくlookups
と呼ばれる)を介して、 。DB正規化とルックアップテーブル
は1つのアカウントに割り当てることができますが(常に1つのアカウントに割り当てる必要があります)、inner-meはその外部キーを作成する必要があります。
しかし、私はオブジェクト/データリソースを抽象化し、そのコンテキストを切り離すというコンセプトが本当に好きです(たとえば、アカウントやユーザーなどに割り当てられているなど)。
リンク:
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';
例は、手を振っている記述よりも優れています。この具体的な例をいくつか挙げてください。 –
少なくとも、動作するいくつかのスキーマ。 – jpm
がスキーマで更新されました。 – onassar