0

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'; 
+1

例は、手を振っている記述よりも優れています。この具体的な例をいくつか挙げてください。 –

+0

少なくとも、動作するいくつかのスキーマ。 – jpm

+0

がスキーマで更新されました。 – onassar

答えて

1

ですから、なしのリンクを保存したい、誰もがEM :)

スキーマを持っている場合

は、いくつかの考えをお願い申し上げます外部キーの原因を追加すると、それをリンクしてアカウントと言うことになります。 FKは1つの特定のテーブルを指しているので

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

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

関連する問題