Difference between revisions of "InstaGov"
(→Preliminary Table Design: rating) |
(→Preliminary Table Design: added approval_log table, ID_Proxy field) |
||
Line 34: | Line 34: | ||
ENGINE = MYISAM;</mysql> | ENGINE = MYISAM;</mysql> | ||
<section end=sql /> | <section end=sql /> | ||
− | === | + | ===approval=== |
− | <section begin=sql /><mysql>CREATE TABLE ` | + | Records each user's current level of approval of each proposed solution. |
+ | <section begin=sql /><mysql>CREATE TABLE `approval` ( | ||
`ID` INT NOT NULL AUTO_INCREMENT, | `ID` INT NOT NULL AUTO_INCREMENT, | ||
`ID_User` INT COMMENT "user.ID of user who gave this rating", | `ID_User` INT COMMENT "user.ID of user who gave this rating", | ||
`ID_Solution` INT NOT NULL COMMENT "solution.ID of solution for which this is a rating", | `ID_Solution` INT NOT NULL COMMENT "solution.ID of solution for which this is a rating", | ||
+ | `ID_Proxy` INT DEFAULT NULL COMMENT "if this approval was proxied, records who the proxy was", | ||
+ | `Value` INT NOT NULL COMMENT "rating value", | ||
+ | `WhenDone` DATETIME NOT NULL COMMENT "when this rating was posted", | ||
+ | `Comments` VARCHAR(255) COMMENT "comments on this rating (can include link)", | ||
+ | PRIMARY KEY(`ID`) | ||
+ | ) | ||
+ | ENGINE = MYISAM;</mysql> | ||
+ | <section end=sql /> | ||
+ | * '''Proxy approval''' is a concept I keep coming back to. Rather than trying to prevent vote-buying by secret ballots, which cause their own problems (make recounting more difficult, inhibits discussion of personal voting record), it goes exactly the opposite direction and encourages them while ''documenting'' every occurrence for further analysis. | ||
+ | ===approval log=== | ||
+ | Records every time a user submits an approval rating, including revisions. | ||
+ | <section begin=sql /><mysql>CREATE TABLE `approval_log` ( | ||
+ | `ID` INT NOT NULL AUTO_INCREMENT, | ||
+ | `ID_Approval` INT NOT NULL COMMENT "approval.ID of approval to which this rating was applied", | ||
+ | `ID_User` INT COMMENT "user.ID of user who gave this rating", | ||
+ | `ID_Solution` INT NOT NULL COMMENT "solution.ID of solution for which this is a rating", | ||
+ | `ID_Proxy` INT DEFAULT NULL COMMENT "if this approval was proxied, records who the proxy was", | ||
`Value` INT NOT NULL COMMENT "rating value", | `Value` INT NOT NULL COMMENT "rating value", | ||
`WhenDone` DATETIME NOT NULL COMMENT "when this rating was posted", | `WhenDone` DATETIME NOT NULL COMMENT "when this rating was posted", |
Revision as of 01:47, 30 June 2008
Overview
InstaGov is software to aid very large groups in the process of decisionmaking and evaluating a large number of items which are entered into the system collaboratively. The philosophy behind its primary purpose (collaborative governance) is discussed in great detail on Issuepedia, but there will probably be other uses for it as well.
InstaGov has two primary functions:
- vote tallying: collecting votes from each member and presenting aggregated data showing overall sentiment towards each issue
- issue management:
- aggregating individual rankings to determine which issues should be propagated to more people and which should be allowed to die out
- organizing issues into a hierarchical topic system to allow users to filter in or out areas in which they have no interest
InstaGov will probably first be written as a plug-in for MediaWiki; it may later be available in other formats. It is entirely open source, so others are free to adapt it to their own uses or add their own features.
Preliminary Table Design
problem
<mysql>CREATE TABLE `problem` (
`ID` INT NOT NULL AUTO_INCREMENT, `Page` varchar(127) COMMENT "wiki page describing problem", `WhenCreated` DATETIME NOT NULL COMMENT "when this problem was entered", `WhenExpires` DATETIME DEFAULT NULL COMMENT "when this problem expires (NULL = never)", `Pos_Text` VARCHAR(63) DEFAULT NULL COMMENT "optional: text to show at the 'yes' end of the scale", `Neg_Text` VARCHAR(63) DEFAULT NULL COMMENT "optional: text to show at the 'no' end of the scale", PRIMARY KEY(`ID`) ) ENGINE = MYISAM;</mysql>
solution
Any problem may have zero or more solutions. Solutions can be proposed as long as the problem is active (not expired).
<mysql>CREATE TABLE `solution` (
`ID` INT NOT NULL AUTO_INCREMENT, `ID_Problem` INT NO NULL COMMENT "problem.ID of problem for which this is a solution", `Page` varchar(127) COMMENT "wiki page describing solution", `WhenCreated` DATETIME NOT NULL COMMENT "when this solution was entered", `WhenExpires` DATETIME DEFAULT NULL COMMENT "when this solution expires (NULL = never)", PRIMARY KEY(`ID`) ) ENGINE = MYISAM;</mysql>
approval
Records each user's current level of approval of each proposed solution.
<mysql>CREATE TABLE `approval` (
`ID` INT NOT NULL AUTO_INCREMENT, `ID_User` INT COMMENT "user.ID of user who gave this rating", `ID_Solution` INT NOT NULL COMMENT "solution.ID of solution for which this is a rating", `ID_Proxy` INT DEFAULT NULL COMMENT "if this approval was proxied, records who the proxy was", `Value` INT NOT NULL COMMENT "rating value", `WhenDone` DATETIME NOT NULL COMMENT "when this rating was posted", `Comments` VARCHAR(255) COMMENT "comments on this rating (can include link)", PRIMARY KEY(`ID`) ) ENGINE = MYISAM;</mysql>
- Proxy approval is a concept I keep coming back to. Rather than trying to prevent vote-buying by secret ballots, which cause their own problems (make recounting more difficult, inhibits discussion of personal voting record), it goes exactly the opposite direction and encourages them while documenting every occurrence for further analysis.
approval log
Records every time a user submits an approval rating, including revisions.
<mysql>CREATE TABLE `approval_log` (
`ID` INT NOT NULL AUTO_INCREMENT, `ID_Approval` INT NOT NULL COMMENT "approval.ID of approval to which this rating was applied", `ID_User` INT COMMENT "user.ID of user who gave this rating", `ID_Solution` INT NOT NULL COMMENT "solution.ID of solution for which this is a rating", `ID_Proxy` INT DEFAULT NULL COMMENT "if this approval was proxied, records who the proxy was", `Value` INT NOT NULL COMMENT "rating value", `WhenDone` DATETIME NOT NULL COMMENT "when this rating was posted", `Comments` VARCHAR(255) COMMENT "comments on this rating (can include link)", PRIMARY KEY(`ID`) ) ENGINE = MYISAM;</mysql>