Despot:Schema2: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
mNo edit summary  | 
				mNo edit summary  | 
				||
| Line 1: | Line 1: | ||
== Proposed Schema ==  | == Proposed Schema ==  | ||
`repositories`  | |||
  `id` mediumint(8) unsigned NOT NULL auto_increment,  | |||
  `name` varchar(255) NOT NULL,  | |||
  `type` tinyint(3) unsigned NOT NULL,  | |||
  `root` varchar(255) NOT NULL,  | |||
  `vouchers_req` tinyint(3) unsigned NOT NULL default '2',  | |||
  `sr_req` tinyint(3) unsigned NOT NULL default '1',  | |||
  `private` tinyint(1) NOT NULL default '0',  | |||
  PRIMARY KEY  (`id`),  | |||
  UNIQUE KEY `name` (`name`,`type`)  | |||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`partitions`  | |||
  `id` mediumint(8) unsigned NOT NULL auto_increment,  | |||
  `name` varchar(255) NOT NULL,  | |||
  `state` enum('open','restricted','closed') NOT NULL default 'open',  | |||
  `description` text,  | |||
  `doclinks` mediumtext,  | |||
  `newsgroups` mediumtext,  | |||
  `private` tinyint(1) NOT NULL default '0',  | |||
  PRIMARY KEY  (`id`),  | |||
  KEY `name` (`name`),  | |||
  KEY `parent_id` (`parent_id`)  | |||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`repositories_partitions`  | |||
  `repository_id` mediumint(8) unsigned NOT NULL,  | |||
  `partition_id` mediumint(8) unsigned NOT NULL  | |||
  KEY `repository_id` (`repository_id`),  | |||
  KEY `partition_id` (`partition_id`)  | |||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`branches`  | `branches`  | ||
   `id` mediumint(8) unsigned NOT NULL auto_increment,  |    `id` mediumint(8) unsigned NOT NULL auto_increment,  | ||
| Line 5: | Line 37: | ||
   `description` varchar(255) NULL,  |    `description` varchar(255) NULL,  | ||
   PRIMARY KEY  (`id`)  |    PRIMARY KEY  (`id`)  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`files`  | `files`  | ||
| Line 14: | Line 47: | ||
   KEY `repository_id` (`repository_id`),  |    KEY `repository_id` (`repository_id`),  | ||
   KEY `branch_id` (`branch_id`)  |    KEY `branch_id` (`branch_id`)  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`members`  | `members`  | ||
| Line 21: | Line 55: | ||
   UNIQUE KEY `user_id` (`user_id`,`partition_id`),  |    UNIQUE KEY `user_id` (`user_id`,`partition_id`),  | ||
   KEY `class` (`class`)  |    KEY `class` (`class`)  | ||
   ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`logs` (incomplete)  | `logs` (incomplete)  | ||
   `id` int(11) unsigned NOT NULL auto_increment,  | |||
   `user_id` mediumint(8) unsigned NOT NULL,  |    `user_id` mediumint(8) unsigned NOT NULL,  | ||
   `action` varchar(50) NOT NULL,  |    `action` varchar(50) NOT NULL,  | ||
   `field` varchar(30) NULL,  |    `field` varchar(30) NULL,  | ||
   `time` datetime NOT NULL DEFAULT   |   `old_val` text,  | ||
  `new_val` text,  | |||
  `notes` text NULL,  | |||
   `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'  | |||
   PRIMARY KEY (`id`)  |    PRIMARY KEY (`id`)  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`restrictions`  | `restrictions`  | ||
| Line 59: | Line 73: | ||
   `partition_id` mediumint(8) unsigned NOT NULL,  |    `partition_id` mediumint(8) unsigned NOT NULL,  | ||
   UNIQUE KEY `user_id` (`user_id`,`partition_id`)  |    UNIQUE KEY `user_id` (`user_id`,`partition_id`)  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`sessions`  | `sessions`  | ||
| Line 65: | Line 80: | ||
   `expires` int(11) default NULL,  |    `expires` int(11) default NULL,  | ||
   PRIMARY KEY  (`id`)  |    PRIMARY KEY  (`id`)  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`syncneeded`  | `syncneeded`  | ||
   `repository_id` mediumint(8) unsigned NOT NULL,  |    `repository_id` mediumint(8) unsigned NOT NULL,  | ||
   `needed` tinyint(1) NOT NULL default '0'  |    `needed` tinyint(1) NOT NULL default '0'  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`tags` (incomplete)  | `tags` (incomplete)  | ||
   `id` mediumint(8) unsigned NOT NULL auto_increment</span>,  | |||
   `name` varchar(255) NOT NULL,  |    `name` varchar(255) NOT NULL,    | ||
   PRIMARY KEY `id`  |    PRIMARY KEY `id`  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
`vouchers`  | `vouchers`  | ||
| Line 82: | Line 99: | ||
   `sr` tinyint(1) NOT NULL default '0',  |    `sr` tinyint(1) NOT NULL default '0',  | ||
   KEY `user_id` (`user_id`,`partition_id`,`voucher_id`)  |    KEY `user_id` (`user_id`,`partition_id`,`voucher_id`)  | ||
  ENGINE=InnoDB DEFAULT CHARSET=utf8  | |||
== Notes ==  | == Notes ==  | ||
Latest revision as of 03:34, 31 March 2007
Proposed Schema
`repositories`
`id` mediumint(8) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL, `type` tinyint(3) unsigned NOT NULL, `root` varchar(255) NOT NULL, `vouchers_req` tinyint(3) unsigned NOT NULL default '2', `sr_req` tinyint(3) unsigned NOT NULL default '1', `private` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`,`type`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`partitions`
 `id` mediumint(8) unsigned NOT NULL auto_increment,
 `name` varchar(255) NOT NULL,
 `state` enum('open','restricted','closed') NOT NULL default 'open',
 `description` text,
 `doclinks` mediumtext,
 `newsgroups` mediumtext,
 `private` tinyint(1) NOT NULL default '0',
 PRIMARY KEY  (`id`),
 KEY `name` (`name`),
 KEY `parent_id` (`parent_id`)
 ENGINE=InnoDB DEFAULT CHARSET=utf8
`repositories_partitions`
`repository_id` mediumint(8) unsigned NOT NULL, `partition_id` mediumint(8) unsigned NOT NULL KEY `repository_id` (`repository_id`), KEY `partition_id` (`partition_id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`branches`
`id` mediumint(8) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL, `description` varchar(255) NULL, PRIMARY KEY (`id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`files`
`partition_id` mediumint(8) unsigned NOT NULL, `repository_id` mediumint(8) unsigned NOT NULL, `branch_id` mediumint(8) unsigned NOT NULL default '0', `pattern` varchar(255) NOT NULL, KEY `partition_id` (`partition_id`), KEY `repository_id` (`repository_id`), KEY `branch_id` (`branch_id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`members`
 `user_id` mediumint(8) unsigned NOT NULL,
 `partition_id` mediumint(8) unsigned NOT NULL,
 `class` enum('owner','peer','member') NOT NULL default 'member',
 UNIQUE KEY `user_id` (`user_id`,`partition_id`),
 KEY `class` (`class`)
 ENGINE=InnoDB DEFAULT CHARSET=utf8
`logs` (incomplete)
`id` int(11) unsigned NOT NULL auto_increment, `user_id` mediumint(8) unsigned NOT NULL, `action` varchar(50) NOT NULL, `field` varchar(30) NULL, `old_val` text, `new_val` text, `notes` text NULL, `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' PRIMARY KEY (`id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`restrictions`
`user_id` mediumint(8) unsigned NOT NULL, `partition_id` mediumint(8) unsigned NOT NULL, UNIQUE KEY `user_id` (`user_id`,`partition_id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`sessions`
`id` varchar(255) NOT NULL default '', `data` text, `expires` int(11) default NULL, PRIMARY KEY (`id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
`syncneeded`
`repository_id` mediumint(8) unsigned NOT NULL, `needed` tinyint(1) NOT NULL default '0' ENGINE=InnoDB DEFAULT CHARSET=utf8
`tags` (incomplete)
`id` mediumint(8) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL, PRIMARY KEY `id` ENGINE=InnoDB DEFAULT CHARSET=utf8
`vouchers`
`user_id` mediumint(8) unsigned NOT NULL, `partition_id` mediumint(8) unsigned NOT NULL, `voucher_id` mediumint(8) unsigned NOT NULL, `sr` tinyint(1) NOT NULL default '0', KEY `user_id` (`user_id`,`partition_id`,`voucher_id`) ENGINE=InnoDB DEFAULT CHARSET=utf8
Notes
- Make tags object agnostic (i.e. allow tagging users, partitions, etc. together with a single tag).
 - Consider using InnoDB for several tables where ACID compliance is important.
- Also allows simplification of table relationships with real foreign keys and constraints.
 
 - Replace *_changes tables with a unified and more comprehensive generic log table.
- Decide which log items should expire over time.