への外部キーです状況では、サービスをドキュメント中心のストレージにして、リレーショナルデータ構造に格納するのではなく、データは当然ながらリレーショナルではないので、システム全体を簡単に書くことができ、このように設計すると効率が向上します。
ドキュメント中心とは、サービスがリクエストされると、アプリケーションはドキュメントテンプレートを使用してユーザーにフォームを提示し、ユーザーの入力を単一のドキュメントとしてキャプチャし、複数の列のデータや複数のテーブル。
ドキュメント形式には多くの選択肢がありますが、最も一般的なものの2つはJSONとXMLです。長所と短所の助けが必要な場合、私はこれが別の質問であるべきだと思います。
ドキュメントを保存するには、ファイルシステムまたはBigTableを使用します。リレーショナルデータベースでは、ドキュメントを単一の列として格納することもできますが、このオプションを避けるように強くお勧めします。
/*!40101 SET NAMES utf8mb4 */;
CREATE DATABASE IF NOT EXISTS `services` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
USE `services`;
CREATE TABLE IF NOT EXISTS `organization` (
`organization_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`organization_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `request_service` (
`request_id` int(11) NOT NULL AUTO_INCREMENT,
`organization_id` int(11) NOT NULL,
`service_id` int(11) NOT NULL,
`service_type` int(11) NOT NULL,
`document` LONGTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`tracking_no` int(11) DEFAULT NULL,
PRIMARY KEY (`request_id`),
KEY `FK_request_service_service` (`service_id`),
KEY `FK_request_service_organization` (`organization_id`),
CONSTRAINT `FK_request_service_organization` FOREIGN KEY (`organization_id`) REFERENCES `organization` (`organization_id`),
CONSTRAINT `FK_request_service_service` FOREIGN KEY (`service_id`) REFERENCES `service` (`service_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `requirement` (
`requirement_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`requirement_type` int(11) NOT NULL,
PRIMARY KEY (`requirement_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `restriction` (
`restriction_id` int(11) NOT NULL AUTO_INCREMENT,
`service_id` int(11) NOT NULL,
`is_allowed` bit(1) NOT NULL,
`for_active_only` bit(1) NOT NULL,
PRIMARY KEY (`restriction_id`),
KEY `FK_service_restrictions_service` (`service_id`),
CONSTRAINT `FK_service_restrictions_service` FOREIGN KEY (`service_id`) REFERENCES `service` (`service_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `service` (
`service_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`requirement_id` int(11) NOT NULL,
PRIMARY KEY (`service_id`),
KEY `FK_service_list_of_requirement` (`requirement_id`),
CONSTRAINT `FK_service_list_of_requirement` FOREIGN KEY (`requirement_id`) REFERENCES `requirement` (`requirement_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
あなたはコンポジットキーに見ていました:
あなたのデータベーススキーマは次のようになりますか?ここにリンクがありますhttp://stackoverflow.com/questions/5835978/how-to-properly-create-composite-primary-keys-mysql –