私は組織のメンバーシップ ディレクトリを作成しており、全員の詳細を整理して更新可能な方法で保持するための良い方法を見つけようとしています。私は3つのテーブルを持っています:
Person テーブルは実際の人物を扱います
CREATE TABLE `person` (
`personid` BIGINT PRIMARY KEY AUTO_INCREMENT,
`personuuid` CHAR(32) NOT NULL,
`first_name` VARCHAR(50) DEFAULT '',
`middle_name` VARCHAR(50) DEFAULT '',
`last_name` VARCHAR(50) DEFAULT '',
`prefix` VARCHAR(32) DEFAULT '',
`suffix` VARCHAR(32) DEFAULT '',
`nickname` VARCHAR(50) DEFAULT '',
`username` VARCHAR(32) ,
`created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` CHAR(33) DEFAULT '000000000000000000000000000000000',
`last_updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`last_updated_by` CHAR(33) DEFAULT '000000000000000000000000000000000'
) ENGINE=InnoDB, COMMENT='people';
個人に関する情報。学校、電話番号、電子メール、Twitter 名など。これらの値はすべて json として「値」に格納され、私のプログラムはすべてを処理します。ユーザーが更新するたびに、変更の推移を示す新しいエントリが作成されます。
CREATE TABLE `person_info` (
`person_infoid` BIGINT PRIMARY KEY AUTO_INCREMENT,
`person_infouuid` CHAR(32) NOT NULL,
`person_info_type` INT(4) NOT NULL DEFAULT 9999,
`value` TEXT,
`created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` CHAR(33) DEFAULT '000000000000000000000000000000000',
`last_updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`last_updated_by` CHAR(33) DEFAULT '000000000000000000000000000000000'
) ENGINE=InnoDB, COMMENT="Personal Details";
person テーブルと person_info テーブルの間のマップ
CREATE TABLE `person_info_map` (
`personuuid` CHAR(32),
`person_infouuid` CHAR(32) ,
`created_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_by` CHAR(33) DEFAULT '000000000000000000000000000000000',
`is_active` INTEGER(1)
) ENGINE=InnoDB, COMMENT="Map between person and person info";
更新があるたびに新しいエントリを作成していることを考えるとperson_info
、I / Oエラー、テーブルが大きくなるなどを心配する必要があるかどうか疑問に思っています.もしそうなら、可能な解決策は何ですか? 私は、このようなデータベース スキーマを実際に扱ったことがないので、将来失敗するのではなく、助けを求める必要があると考えています。
更新の頻度を尋ねる人もいると思います。正直なところ、私はあまり期待していません。現在、ディレクトリには 2,000 人のメンバーがいますが、いつでも 10,000 を超えるアクティブなメンバーがいるとは思っていません。また、最大で 50 の異なるオプション タイプがあると考えていますが、安全と将来の目的のために、最大 1000 の異なるオプション タイプを許可します。
この小さなピースを考慮して、ここからどのように進めるべきかについて誰かアドバイスはありますか?