0

mysqlでこのようなテーブルを作成することは可能ですか?はいの場合は、テーブルのサンプルデータで説明してください(最初の挿入を行うときにテーブルの値はどうなりますか)。

Subscriber
------------
SubscriberId: guid() <<pk>>
privateUserIDs string <<fk>>
value1 string
...

User
----
privateUserIDs string <<pk>>
SubscriberId: guid() <<fk>>
value2 string
...

このdbスキーマはGoogleドキュメントから入手しました。

注:関係は1..nです

ここに画像の説明を入力してください

4

2 に答える 2

1

外部キーチェックをオフにすることで、スキーマ内で任意の順序でテーブルを作成できます。

たとえば、以下では、Usersテーブルをまだ作成せずに、Usersテーブルに外部キーを使用してBannedUsersテーブルを作成します。

その後、必ず外部キーチェックを再度有効にしてください。

以下の例は、InnoDBエンジンを使用してMySQL5.5.31データベースでテストされています。

SET FOREIGN_KEY_CHECKS=0;

CREATE TABLE IF NOT EXISTS `BannedUsers` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(10) unsigned NOT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_id` (`user_id`),
  KEY `FK_BannedUsers_Users` (`user_id`),
  CONSTRAINT `FK_BannedUsers_Users` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `Users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(254) COLLATE utf8_unicode_ci NOT NULL,
  `username` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
  `firstname` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastname` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

SET FOREIGN_KEY_CHECKS=1;
于 2013-05-11T14:48:54.830 に答える
0

それは不可能。理由は簡単です

最初にユーザーテーブルを作成する場合、FKを作成するには、ユーザーテーブル内のサブスクライバーテーブルのPKを参照する必要があるため、スキーマテーブルのサブスクライバーが存在する必要があります。

同様に、最初にサブスクライバーテーブルを作成する場合は、ユーザーテーブルスキーマが必要になりますが、上記の理由により、これも不可能です。

さらに、どういうわけか2つのテーブルを定義すると、FKの制約により、1つのテーブルから行を削除すると他のテーブルのデータに一貫性がなくなるため、将来的に非常に一貫性のないdbになる可能性があります。

于 2013-02-26T07:04:00.533 に答える