A QCodo powered CMS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1766 lines
71 KiB

  1. USE quintacms;
  2. CREATE TABLE `usergroup` (
  3. `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `name` VARCHAR(128),
  5. CONSTRAINT pk_usergroup PRIMARY KEY (`id`),
  6. UNIQUE KEY uk_usergroup (`name`)
  7. )
  8. ENGINE = InnoDB
  9. CHARACTER SET utf8 COLLATE utf8_general_ci;
  10. INSERT INTO usergroup (name) VALUES ('Everyone');
  11. INSERT INTO usergroup (name) VALUES ('Members');
  12. INSERT INTO usergroup (name) VALUES ('Customers');
  13. INSERT INTO usergroup (name) VALUES ('Designers');
  14. INSERT INTO usergroup (name) VALUES ('Administrators');
  15. INSERT INTO usergroup (name) VALUES ('Engineers');
  16. INSERT INTO usergroup (name) VALUES ('Manufacturers');
  17. INSERT INTO usergroup (name) VALUES ('Suppliers');
  18. INSERT INTO usergroup (name) VALUES ('Developers');
  19. INSERT INTO usergroup (name) VALUES ('Teachers');
  20. INSERT INTO usergroup (name) VALUES ('Students');
  21. INSERT INTO usergroup (name) VALUES ('Employees');
  22. CREATE TABLE `permission_type` (
  23. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  24. `name` VARCHAR(64),
  25. CONSTRAINT pk_permission_type PRIMARY KEY (`id`),
  26. UNIQUE KEY uk_permssion_type (`name`)
  27. )
  28. ENGINE = InnoDB
  29. CHARACTER SET utf8 COLLATE utf8_general_ci;
  30. INSERT INTO permission_type (name) VALUES ('None');
  31. INSERT INTO permission_type (name) VALUES ('View');
  32. INSERT INTO permission_type (name) VALUES ('Modify');
  33. INSERT INTO permission_type (name) VALUES ('Delete');
  34. INSERT INTO permission_type (name) VALUES ('Create');
  35. /***********************************************************************
  36. Notes on the person table and its associate dependant tables
  37. 1. INSERT INTO person(is_virtual) VALUES(false);
  38. 2. INSERT INTO account(username,password,now(),true,1,1,person.id)
  39. 3. INSERT INTO address, using person.id FK
  40. So, we create a row in the person table using data in other tables.
  41. This means we need to insert the person first, get the insert id, then insert the others
  42. with the id and then update the person row with the ids from the others to maintain
  43. referential integrity.
  44. Case 2 illustrates the purpose of the design - we want to allow members to send gifts to friends
  45. periodically. So, they can create a new "virtual" person with name and address and store it
  46. making it available as an selection when they choose a shipping address during a checkout.
  47. This way, we can have other names and address tied to the User instead of the Account
  48. thus keeping the one to one relationship of person - account while allowing multiple names
  49. and address within normal forms (without duplication). Any additional name and address
  50. must be other than type primary and type primary must exist for a User in order for them
  51. to make a purchase.
  52. Use case - Member Registration:
  53. * Chooses username and login, optional address info (this would define them as a customer) ..
  54. 1. create person object with defaults
  55. 2. create account object using person.id - an account is tied to a single person
  56. 3. if address info, create address object FK person_id gets person.id, type is set to primary
  57. else - error.
  58. 4. repeat for phone, email, shipping, billing - all optional
  59. Use case - Member addition (ie, adds a gift address/person ):
  60. 1. User fills in fields - collect and perform inserts as above
  61. 2. Set address.person_id to new person.id
  62. 3. Set type to billing, friend, etc - mandatory, if not, then this defaults to an address change
  63. Use case - Administrator addition:
  64. 1. If no account exists, steps 1 - 2 of Use Case 1.
  65. 2. Else, (or after 1.) proceed as in Use Case 2 assigning FK id columns to an existing
  66. or newly created row in person (eg. address.person_id = person.id)
  67. ******************************************************************************/
  68. CREATE TABLE `person` (
  69. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  70. `name_prefix` VARCHAR(32) DEFAULT '', -- 'eg. Mr., Ms ..',
  71. `first_name` VARCHAR(256) NOT NULL,
  72. `middle_name` VARCHAR(128) DEFAULT '',
  73. `last_name` VARCHAR(256) NOT NULL,
  74. `name_suffix` VARCHAR(32) DEFAULT '', -- 'eg. PhD. MD, etc ..',
  75. `nick_name` VARCHAR(128) DEFAULT 'Anonymous',
  76. `avatar_uri` VARCHAR(256) , -- optional avatar image for person
  77. `company_name` VARCHAR(256) DEFAULT '',
  78. `owner_person_id` BIGINT UNSIGNED,
  79. `is_virtual` BOOL DEFAULT FALSE, -- true for persons in members' addressbook, suppliers, manufacturers ...
  80. CONSTRAINT pk_person PRIMARY KEY (`id`),
  81. INDEX idx_person_firstname (`first_name`),
  82. INDEX idx_person_last_name (`last_name`),
  83. FOREIGN KEY (`owner_person_id`) REFERENCES person(`id`) ON DELETE CASCADE
  84. )
  85. ENGINE = InnoDB
  86. CHARACTER SET utf8 COLLATE utf8_general_ci;
  87. CREATE TABLE `email_address` (
  88. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  89. `url` VARCHAR(128) NOT NULL,
  90. `person_id` BIGINT UNSIGNED NOT NULL,
  91. `is_primary` TINYINT UNSIGNED DEFAULT 0,
  92. PRIMARY KEY (`id`),
  93. FOREIGN KEY (`person_id`) REFERENCES person(`id`) ON DELETE CASCADE
  94. )
  95. ENGINE = InnoDB
  96. CHARACTER SET utf8 COLLATE utf8_general_ci;
  97. CREATE TABLE `phone_number` (
  98. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  99. `number` VARCHAR(32) NOT NULL,
  100. `person_id` BIGINT UNSIGNED NOT NULL,
  101. `is_primary` TINYINT UNSIGNED DEFAULT 0,
  102. PRIMARY KEY (`id`),
  103. FOREIGN KEY (`person_id`) REFERENCES person(`id`) ON DELETE CASCADE
  104. )
  105. ENGINE = InnoDB
  106. CHARACTER SET utf8 COLLATE utf8_general_ci;
  107. CREATE TABLE `account_status_type` (
  108. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  109. `name` VARCHAR(64),
  110. CONSTRAINT pk_account_status_type PRIMARY KEY (`id`),
  111. UNIQUE KEY uk_account_status_type (`name`)
  112. )
  113. ENGINE = InnoDB
  114. CHARACTER SET utf8 COLLATE utf8_general_ci;
  115. INSERT INTO account_status_type (name) VALUES ('Active');
  116. INSERT INTO account_status_type (name) VALUES ('Cancelled');
  117. INSERT INTO account_status_type (name) VALUES ('Suspended');
  118. CREATE TABLE `account_type` (
  119. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  120. `name` VARCHAR(64),
  121. CONSTRAINT pk_account_type PRIMARY KEY (`id`),
  122. UNIQUE KEY uk_account_type (`name`)
  123. )
  124. ENGINE = InnoDB
  125. CHARACTER SET utf8 COLLATE utf8_general_ci;
  126. INSERT INTO account_type (name) VALUES ('Member');
  127. INSERT INTO account_type (name) VALUES ('Customer');
  128. INSERT INTO account_type (name) VALUES ('Employee');
  129. INSERT INTO account_type (name) VALUES ('Administrator');
  130. INSERT INTO account_type (name) VALUES ('Supplier');
  131. INSERT INTO account_type (name) VALUES ('Manufacturer');
  132. CREATE TABLE `account` (
  133. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  134. `registration_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  135. `username` VARCHAR(128) NOT NULL,
  136. `password` VARCHAR(128) NOT NULL,
  137. `notes` TEXT,
  138. `last_login` TIMESTAMP,
  139. `login_count` INT UNSIGNED DEFAULT 0,
  140. `online` BOOL NOT NULL DEFAULT FALSE,
  141. `onetime_password` BOOL NOT NULL DEFAULT FALSE,
  142. `valid_password` BOOL NOT NULL DEFAULT TRUE,
  143. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  144. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  145. `person_id` BIGINT UNSIGNED NOT NULL,
  146. CONSTRAINT pk_account PRIMARY KEY (`id`),
  147. UNIQUE KEY idx_account_username (`username`),
  148. UNIQUE KEY idx_account_person (`person_id`),
  149. INDEX idx_account_type (`type_id`),
  150. INDEX idx_account_status (`status_id`),
  151. FOREIGN KEY (`type_id`) REFERENCES account_type(`id`),
  152. FOREIGN KEY (`status_id`) REFERENCES account_status_type(`id`),
  153. FOREIGN KEY (`person_id`) REFERENCES person(`id`) ON DELETE CASCADE
  154. )
  155. ENGINE = InnoDB
  156. CHARACTER SET utf8 COLLATE utf8_general_ci
  157. COMMENT = 'Corresponds to the normal user | customers | members table';
  158. CREATE TABLE `country_type` (
  159. `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  160. `name` VARCHAR(128) NOT NULL DEFAULT '',
  161. `iso_code_2` CHAR(2) NOT NULL DEFAULT '',
  162. `iso_code_3` CHAR(3) NOT NULL DEFAULT '',
  163. PRIMARY KEY (`id`),
  164. UNIQUE KEY `idx_country_name` (`name`),
  165. INDEX `idx_iso_2` (`iso_code_2`),
  166. INDEX `idx_iso_3` (`iso_code_3`)
  167. )
  168. ENGINE = InnoDB
  169. CHARACTER SET utf8 COLLATE utf8_general_ci;
  170. CREATE TABLE `zone_type` (
  171. `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  172. `name` VARCHAR(128) NOT NULL,
  173. `country_id` SMALLINT UNSIGNED NOT NULL DEFAULT 255,
  174. `code` VARCHAR(32) NOT NULL DEFAULT 'N/A',
  175. PRIMARY KEY (`id`),
  176. UNIQUE KEY uk_zone_type_name (`name`),
  177. INDEX idx_zone_code (`code`),
  178. FOREIGN KEY (`country_id`) REFERENCES country_type(`id`) ON DELETE CASCADE
  179. )
  180. ENGINE = InnoDB
  181. CHARACTER SET utf8 COLLATE utf8_general_ci;
  182. CREATE TABLE `address_type` (
  183. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  184. `name` VARCHAR(64),
  185. CONSTRAINT pk_address_type PRIMARY KEY (`id`),
  186. UNIQUE KEY idx_address_type(name)
  187. )
  188. ENGINE = InnoDB
  189. CHARACTER SET utf8 COLLATE utf8_general_ci;
  190. INSERT INTO address_type (name) VALUES ('Primary');
  191. INSERT INTO address_type (name) VALUES ('Shipping');
  192. INSERT INTO address_type (name) VALUES ('Billing');
  193. INSERT INTO address_type (name) VALUES ('Company');
  194. INSERT INTO address_type (name) VALUES ('Friend');
  195. INSERT INTO address_type (name) VALUES ('Manufacturer');
  196. INSERT INTO address_type (name) VALUES ('Supplier');
  197. INSERT INTO address_type (name) VALUES ('Historical');
  198. /*historical includes typo fixes and moved - for order lookups, eventually dated should move to address_history
  199. */
  200. CREATE TABLE `address` (
  201. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  202. `title` VARCHAR(256) DEFAULT 'My Address', -- for human reference, eg. "Dad" or "Uncle Ed"
  203. `person_id` BIGINT UNSIGNED NOT NULL,
  204. `street_1` VARCHAR(256) ,
  205. `street_2` VARCHAR(256) ,
  206. `suburb` VARCHAR(256) ,
  207. `city` VARCHAR(256) ,
  208. `county` VARCHAR(256) , -- text version of zone/district
  209. `zone_id` SMALLINT UNSIGNED NOT NULL DEFAULT 13, -- 'state, province or district
  210. `country_id` SMALLINT UNSIGNED NOT NULL DEFAULT 223,
  211. `postal_code` VARCHAR(32), -- get a table for this
  212. `is_current` BOOL NOT NULL DEFAULT TRUE,
  213. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  214. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  215. `last_modification` TIMESTAMP,
  216. CONSTRAINT pk_address PRIMARY KEY (`id`),
  217. INDEX idx_address_person (`id`),
  218. INDEX idx_address_type (`type_id`),
  219. INDEX idx_address_zone (`zone_id`),
  220. INDEX idx_address_country (`country_id`),
  221. FOREIGN KEY (`zone_id`) REFERENCES zone_type(`id`),
  222. FOREIGN KEY (`country_id`) REFERENCES country_type(`id`),
  223. FOREIGN KEY (`type_id`) REFERENCES address_type(`id`),
  224. FOREIGN KEY (`person_id`) REFERENCES person(`id`)
  225. )
  226. ENGINE = InnoDB
  227. CHARACTER SET utf8 COLLATE utf8_general_ci;
  228. CREATE TABLE `product_type` (
  229. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  230. `name` VARCHAR(64),
  231. CONSTRAINT pk_product_type PRIMARY KEY (`id`),
  232. UNIQUE KEY idx_product_type(name)
  233. )
  234. ENGINE = InnoDB
  235. CHARACTER SET utf8 COLLATE utf8_general_ci;
  236. INSERT INTO product_type (name) VALUES ('Service');
  237. INSERT INTO product_type (name) VALUES ('Storefront');
  238. INSERT INTO product_type (name) VALUES ('Internal');
  239. INSERT INTO product_type (name) VALUES ('Assembly');
  240. INSERT INTO product_type (name) VALUES ('Download');
  241. INSERT INTO product_type (name) VALUES ('Virtual');
  242. INSERT INTO product_type (name) VALUES ('Other');
  243. CREATE TABLE `product_status_type` (
  244. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  245. `name` VARCHAR(64),
  246. CONSTRAINT pk_product_status_type PRIMARY KEY (`id`),
  247. UNIQUE KEY idx_product_status_type(name)
  248. )
  249. ENGINE = InnoDB
  250. CHARACTER SET utf8 COLLATE utf8_general_ci;
  251. INSERT INTO product_status_type (name) VALUES ('Restricted');
  252. INSERT INTO product_status_type (name) VALUES ('Active');
  253. INSERT INTO product_status_type (name) VALUES ('Disabled');
  254. INSERT INTO product_status_type (name) VALUES ('Retired');
  255. CREATE TABLE `product` (
  256. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  257. `manufacturer_id` BIGINT UNSIGNED DEFAULT 1, -- in house
  258. `supplier_id` BIGINT UNSIGNED DEFAULT 1,
  259. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  260. `name` VARCHAR(128) NOT NULL,
  261. `model` VARCHAR(128) NOT NULL,
  262. `short_description` VARCHAR(128) ,
  263. `long_description` TEXT,
  264. `msrp` DECIMAL(12,2) UNSIGNED,
  265. `wholesale_price` DECIMAL(12,2) UNSIGNED,
  266. `retail_price` DECIMAL(12,2) UNSIGNED,
  267. `cost` DECIMAL(12,2) UNSIGNED,
  268. `weight` FLOAT(10,6) UNSIGNED, -- ounces ..
  269. `height` FLOAT(10,6) UNSIGNED, -- inches, X ..
  270. `width` FLOAT(10,6) UNSIGNED, -- inches, Y
  271. `depth` FLOAT(10,6) UNSIGNED, -- inches, Z
  272. `is_virtual` BOOL NOT NULL DEFAULT FALSE,
  273. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  274. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1, -- active, disabled ..
  275. `view_count` BIGINT UNSIGNED,
  276. CONSTRAINT pk_product PRIMARY KEY (`id`),
  277. UNIQUE KEY (`model`),
  278. INDEX idx_product_retail (`retail_price`),
  279. INDEX idx_product_type (`type_id`),
  280. INDEX idx_product_status (`status_id`),
  281. FOREIGN KEY (`type_id`) REFERENCES product_type(`id`),
  282. FOREIGN KEY (`status_id`) REFERENCES product_status_type(`id`),
  283. FOREIGN KEY (`manufacturer_id`) REFERENCES person(`id`) ON DELETE SET NULL,
  284. FOREIGN KEY (`supplier_id`) REFERENCES person(`id`) ON DELETE SET NULL
  285. )
  286. ENGINE = InnoDB
  287. CHARACTER SET utf8 COLLATE utf8_general_ci;
  288. CREATE TABLE `image_size_type` (
  289. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  290. `name` VARCHAR(64),
  291. CONSTRAINT pk_image_size_type PRIMARY KEY (`id`),
  292. UNIQUE KEY idx_image_size_type(name)
  293. )
  294. ENGINE = InnoDB
  295. CHARACTER SET utf8 COLLATE utf8_general_ci;
  296. INSERT INTO image_size_type (name) VALUES ('Icon');
  297. INSERT INTO image_size_type (name) VALUES ('Thumb');
  298. INSERT INTO image_size_type (name) VALUES ('Small');
  299. INSERT INTO image_size_type (name) VALUES ('Medium');
  300. INSERT INTO image_size_type (name) VALUES ('Large');
  301. INSERT INTO image_size_type (name) VALUES ('FullScreen');
  302. INSERT INTO image_size_type (name) VALUES ('Intergalactic');
  303. CREATE TABLE `product_image` (
  304. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  305. `product_id` BIGINT UNSIGNED NOT NULL,
  306. `title` VARCHAR(128),
  307. `alt_tag` VARCHAR(128),
  308. `description` VARCHAR(256) ,
  309. `uri` VARCHAR(256),
  310. `x_size` SMALLINT UNSIGNED, -- pixels, X ..
  311. `y_size` SMALLINT UNSIGNED, -- pixels, Y
  312. `size_type` TINYINT UNSIGNED DEFAULT 2,
  313. CONSTRAINT pk_product_image PRIMARY KEY (`id`),
  314. INDEX idx_size_type(`size_type`),
  315. FOREIGN KEY (`size_type`) REFERENCES image_size_type(`id`),
  316. FOREIGN KEY (`product_id`) REFERENCES product(`id`) ON DELETE CASCADE
  317. )
  318. ENGINE = InnoDB
  319. CHARACTER SET utf8 COLLATE utf8_general_ci;
  320. CREATE TABLE `order_status_type` (
  321. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  322. `name` VARCHAR(64),
  323. CONSTRAINT pk_order_status_type PRIMARY KEY (`id`),
  324. UNIQUE KEY idx_order_status_type(name)
  325. )
  326. ENGINE = InnoDB
  327. CHARACTER SET utf8 COLLATE utf8_general_ci;
  328. INSERT INTO order_status_type (name) VALUES ('Shopping'); -- ie. in the cart ..
  329. INSERT INTO order_status_type (name) VALUES ('Pending');
  330. INSERT INTO order_status_type (name) VALUES ('Paid');
  331. INSERT INTO order_status_type (name) VALUES ('Processing');
  332. INSERT INTO order_status_type (name) VALUES ('Packaged');
  333. INSERT INTO order_status_type (name) VALUES ('Shipped');
  334. INSERT INTO order_status_type (name) VALUES ('Cancelled');
  335. INSERT INTO order_status_type (name) VALUES ('Returned'); -- Note: may need to move to order_item ..
  336. INSERT INTO order_status_type (name) VALUES ('Problem');
  337. CREATE TABLE `tax_rate` (
  338. `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  339. `zone_id` SMALLINT UNSIGNED NOT NULL, -- 'state, province or district
  340. `rate` DECIMAL(4,4) UNSIGNED NOT NULL,
  341. CONSTRAINT pk_tax_rate PRIMARY KEY (`id`),
  342. UNIQUE INDEX idx_tax_zone (`zone_id`),
  343. INDEX idx_tax_rate(`rate`),
  344. FOREIGN KEY (`zone_id`) REFERENCES zone_type(`id`)
  345. )
  346. ENGINE = InnoDB
  347. CHARACTER SET utf8 COLLATE utf8_general_ci;
  348. -- INSERT INTO tax_rate ( `rate` ) VALUES (19.6);
  349. -- INSERT INTO tax_rate ( `rate` ) VALUES (5.5);
  350. CREATE TABLE `shipping_rate` (
  351. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  352. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  353. `rate` DECIMAL(2,2) NOT NULL,
  354. `zone_id` SMALLINT UNSIGNED NOT NULL, -- 'state, province or district
  355. CONSTRAINT pk_shipping_rate PRIMARY KEY (`id`),
  356. UNIQUE INDEX idx_shipping_zone (`zone_id`),
  357. INDEX idx_shipping_rate(`id`),
  358. FOREIGN KEY (`zone_id`) REFERENCES zone_type(`id`)
  359. )
  360. ENGINE = InnoDB
  361. CHARACTER SET utf8 COLLATE utf8_general_ci;
  362. -- INSERT INTO shipping_rate ( `rate` ) VALUES (19.6);
  363. -- INSERT INTO shipping_rate ( `rate` ) VALUES (5.5);
  364. CREATE TABLE `shipping_method` (
  365. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  366. `title` VARCHAR(128) DEFAULT 'Shipping Method', -- for display
  367. `carrier` VARCHAR(128),
  368. `service_type` VARCHAR(128),
  369. `class_name` VARCHAR(128),
  370. `transit_time` VARCHAR(16), -- in days, eg. 2 - 3
  371. `description` TEXT,
  372. `image_filename` VARCHAR(128),
  373. `active` BOOL DEFAULT FALSE,
  374. `is_international` BOOL DEFAULT FALSE,
  375. `test_mode` BOOL DEFAULT TRUE,
  376. `sort_order` TINYINT UNSIGNED DEFAULT 0, -- ie, first or top
  377. CONSTRAINT pk_shipping_method PRIMARY KEY (`id`)
  378. )
  379. ENGINE = InnoDB
  380. CHARACTER SET utf8 COLLATE utf8_general_ci;
  381. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  382. VALUES ('Local Pickup', 'PickUp', 'Counter', 'NoClass', 'Pick up at the store.', '0',false);
  383. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  384. VALUES ('United States Postal Service', 'USPS','FIRST CLASS', 'USPS','Basic ground delivery','2 - 4',false);
  385. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  386. VALUES ('United States Postal Service', 'USPS','PRIORITY', 'USPS','Priority Mail','2 - 3',false);
  387. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  388. VALUES ('United States Postal Service', 'USPS','EXPRESS', 'USPS','Express Mail','1 - 2',false);
  389. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  390. VALUES ('United States Postal Service', 'USPS','Global Express Guaranteed', 'USPSIntlRateCalculator','Premium international service','3 - 5',true);
  391. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  392. VALUES ('United States Postal Service', 'USPS','Express Mail International', 'USPSIntlRateCalculator','Expedited International service','3 - 5',true);
  393. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  394. VALUES ('United States Postal Service', 'USPS','Priority Mail International', 'USPSIntlRateCalculator','Reliable, economical accelerated airmail','4 - 9',true);
  395. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  396. VALUES ('United States Postal Service', 'USPS','First Class Mail International', 'USPSIntlRateCalculator','Generic, no frills, low cost service','5 - 28',true);
  397. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  398. VALUES ('Federal Express', 'FDXG','FEDEX_GROUND','Fedex', 'Basic ground service','4 - 5',true);
  399. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  400. VALUES ('Federal Express', 'FDXE','FEDEX_2_DAY','Fedex','2 day service','2',true);
  401. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  402. VALUES ('Federal Express', 'FDXE','STANDARD_OVERNIGHT','Fedex','Standard Overnight service','1',true);
  403. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  404. VALUES ('Federal Express', 'FDXE','INTERNATIONAL_ECONOMY','Fedex','Economy International service','3 - 5',true);
  405. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  406. VALUES ('Federal Express', 'FDXE','INTERNATIONAL_PRIORITY','Fedex','Priority International service',' 2 - 3 ',true);
  407. INSERT INTO shipping_method (title, carrier, service_type, class_name, description, transit_time, is_international)
  408. VALUES ('Federal Express', 'FDXE','INTERNATIONAL_FIRST','Fedex','First class International service','2',true);
  409. CREATE TABLE `payment_type` (
  410. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  411. `name` VARCHAR(64),
  412. CONSTRAINT pk_payment_type PRIMARY KEY (`id`),
  413. UNIQUE KEY idx_payment_type(name)
  414. )
  415. ENGINE = InnoDB
  416. CHARACTER SET utf8 COLLATE utf8_general_ci;
  417. INSERT INTO payment_type (name) VALUES ('Online');
  418. INSERT INTO payment_type (name) VALUES ('MailIn');
  419. INSERT INTO payment_type (name) VALUES ('Cash');
  420. INSERT INTO payment_type (name) VALUES ('Credit');
  421. INSERT INTO payment_type (name) VALUES ('GiftCertificate');
  422. INSERT INTO payment_type (name) VALUES ('Complimentary');
  423. CREATE TABLE `payment_method` (
  424. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  425. `title` VARCHAR(128) DEFAULT 'Payment Method',
  426. `service_provider` VARCHAR(128),
  427. `service_type` VARCHAR(128),
  428. `action_class_name` VARCHAR(128),
  429. `description` TEXT,
  430. `image_uri` VARCHAR(128),
  431. `active` BOOL DEFAULT FALSE,
  432. `requires_cc_number` BOOL DEFAULT FALSE,
  433. `save_cc_number` BOOL DEFAULT FALSE,
  434. `test_mode` BOOL DEFAULT TRUE,
  435. `sort_order` TINYINT UNSIGNED DEFAULT 0, -- ie, first or top
  436. `payment_type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  437. CONSTRAINT pk_payment_method PRIMARY KEY (`id`),
  438. INDEX idx_payment_method_type(`payment_type_id`),
  439. FOREIGN KEY (`payment_type_id`) REFERENCES `payment_type`(`id`)
  440. )
  441. ENGINE = InnoDB
  442. CHARACTER SET utf8 COLLATE utf8_general_ci;
  443. INSERT INTO `payment_method` ( title, service_provider, service_type, action_class_name, description, payment_type_id, active, sort_order)
  444. VALUES ('Check/Money Order', 'Our Store', 'Mail', 'PayByMailAction', 'Payment sent by mail', 3, true, 0);
  445. INSERT INTO `payment_method` ( title, service_provider, service_type, action_class_name, description, payment_type_id, sort_order)
  446. VALUES ('PayPal Express Checkout', 'Paypal.com', 'Express Checkout', 'PayPalNVPAction', 'Implementation of PayPal Express Checkout', 1, 2);
  447. INSERT INTO `payment_method` ( title, service_provider, service_type, action_class_name, description, payment_type_id, sort_order)
  448. VALUES ('Credit Card', 'Authorize.net', 'Credit Card', 'AuthorizeNetAction', 'Authorize.net credit card payment processing', 1, 3);
  449. CREATE TABLE `order_type` (
  450. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  451. `name` VARCHAR(64),
  452. CONSTRAINT pk_order_type PRIMARY KEY (`id`),
  453. UNIQUE KEY idx_order_type(name)
  454. )
  455. ENGINE = InnoDB
  456. CHARACTER SET utf8 COLLATE utf8_general_ci;
  457. INSERT INTO order_type (name) VALUES ('Normal');
  458. INSERT INTO order_type (name) VALUES ('Internal');
  459. INSERT INTO order_type (name) VALUES ('Employee');
  460. INSERT INTO order_type (name) VALUES ('Affiliate');
  461. CREATE TABLE `order` (
  462. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  463. `account_id` BIGINT UNSIGNED NOT NULL DEFAULT 1, -- in house
  464. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  465. `last_modification` TIMESTAMP,
  466. `completion_date` DATETIME DEFAULT '0000-00-00 00:00:00',
  467. `product_total_cost` DECIMAL(12,2),
  468. `shipping_cost` DECIMAL(12,2),
  469. `shipping_charged` DECIMAL(12,2),
  470. `handling_cost` DECIMAL(12,2),
  471. `handling_charged` DECIMAL(12,2),
  472. `tax` DECIMAL(12,2),
  473. `product_total_charged` DECIMAL(12,2),
  474. `notes` TEXT ,
  475. `shipping_method_id` TINYINT UNSIGNED DEFAULT 1,
  476. `payment_method_id` TINYINT UNSIGNED DEFAULT 1,
  477. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  478. `type_id` TINYINT UNSIGNED DEFAULT 1,
  479. CONSTRAINT pk_order PRIMARY KEY (`id`),
  480. INDEX idx_order_account (`account_id`),
  481. INDEX idx_order_shipping_method (`shipping_method_id`),
  482. INDEX idx_order_payment_method (`payment_method_id`),
  483. INDEX idx_order_status (`status_id`),
  484. INDEX idx_order_type (`type_id`),
  485. FOREIGN KEY (`shipping_method_id`) REFERENCES `shipping_method`(`id`),
  486. FOREIGN KEY (`payment_method_id`) REFERENCES `payment_method`(`id`),
  487. FOREIGN KEY (`status_id`) REFERENCES `order_status_type`(`id`),
  488. FOREIGN KEY (`type_id`) REFERENCES `order_type`(`id`),
  489. FOREIGN KEY (`account_id`) REFERENCES `account`(`id`)
  490. )
  491. ENGINE = InnoDB
  492. CHARACTER SET utf8 COLLATE utf8_general_ci;
  493. CREATE TABLE `paypal_transaction` (
  494. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  495. `order_id` BIGINT UNSIGNED NOT NULL,
  496. `correlation_id` VARCHAR(128),
  497. `transaction_id` VARCHAR(128),
  498. `pp_token` VARCHAR(128),
  499. `payer_id` VARCHAR (128),
  500. `payer_status` VARCHAR (128),
  501. `payment_status` VARCHAR (128),
  502. `ack_returned` VARCHAR(32),
  503. `api_action` VARCHAR(32),
  504. `time_stamp` DATETIME,
  505. `api_version` VARCHAR(4),
  506. `messages` TEXT,
  507. `amount` DECIMAL(12,2),
  508. /* `shipping_charged` DECIMAL(12,2),
  509. `handling_charged` DECIMAL(12,2),
  510. `tax` DECIMAL(12,2),
  511. `product_total` DECIMAL(12,2),*/
  512. `pp_fee` DECIMAL(12,2),
  513. `payment_method_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  514. CONSTRAINT pk_pp_transaction PRIMARY KEY (`id`),
  515. INDEX idx_pp_transaction_correlationid(`correlation_id`),
  516. INDEX idx_pp_transaction_orderid(`order_id`),
  517. INDEX idx_pp_transaction_payment_methodid(`payment_method_id`),
  518. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  519. )
  520. ENGINE = InnoDB
  521. CHARACTER SET utf8 COLLATE utf8_general_ci;
  522. CREATE TABLE `authorize_net_transaction` (
  523. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  524. `order_id` BIGINT UNSIGNED NOT NULL,
  525. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  526. `response_code` VARCHAR(8),
  527. `response_subcode` VARCHAR(8),
  528. `response_reason_code` VARCHAR(8),
  529. `response_reason_text` TEXT,
  530. `authorization_code` VARCHAR(8),
  531. `transaction_id` VARCHAR(128),
  532. `transaction_type` VARCHAR(128),
  533. `amount` DECIMAL(12,2),
  534. `avs_response_code` VARCHAR(8),
  535. `ccv_response_code` VARCHAR(8),
  536. `cav_response_code` VARCHAR(8),
  537. CONSTRAINT pk_authnet_transaction PRIMARY KEY (`id`),
  538. INDEX idx_authnet_transaction_transactionid(`transaction_id`),
  539. INDEX idx_authnet_transaction_orderid(`order_id`),
  540. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  541. )
  542. ENGINE = InnoDB
  543. CHARACTER SET utf8 COLLATE utf8_general_ci;
  544. CREATE TABLE `order_address_type` (
  545. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  546. `name` VARCHAR(64),
  547. CONSTRAINT pk_order_address_type PRIMARY KEY (`id`),
  548. UNIQUE KEY idx_order_address_type(name)
  549. )
  550. ENGINE = InnoDB
  551. CHARACTER SET utf8 COLLATE utf8_general_ci;
  552. INSERT INTO order_address_type (name) VALUES ('Billing');
  553. INSERT INTO order_address_type (name) VALUES ('Shipping');
  554. INSERT INTO order_address_type (name) VALUES ('Historical');
  555. CREATE TABLE `order_address` (
  556. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  557. `order_id` BIGINT UNSIGNED NOT NULL,
  558. `name_prefix` VARCHAR(16),
  559. `first_name` VARCHAR(128),
  560. `middle_name` VARCHAR(128),
  561. `last_name` VARCHAR(128),
  562. `name_suffix` VARCHAR(16),
  563. `company` VARCHAR(128),
  564. `street_1` VARCHAR(256) ,
  565. `street_2` VARCHAR(256) ,
  566. `suburb` VARCHAR(256) ,
  567. `city` VARCHAR(256) ,
  568. `county` VARCHAR(256) , -- text version of zone/district
  569. `zone_id` SMALLINT UNSIGNED NOT NULL DEFAULT 13, -- 'state, province or district
  570. `country_id` SMALLINT UNSIGNED NOT NULL DEFAULT 223,
  571. `postal_code` VARCHAR(32), -- get a table for this
  572. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  573. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  574. `last_modification` TIMESTAMP,
  575. CONSTRAINT pk_address PRIMARY KEY (`id`),
  576. INDEX idx_address_type (`type_id`),
  577. INDEX idx_address_zone (`zone_id`),
  578. INDEX idx_address_country (`country_id`),
  579. FOREIGN KEY (`zone_id`) REFERENCES zone_type(`id`),
  580. FOREIGN KEY (`country_id`) REFERENCES country_type(`id`),
  581. FOREIGN KEY (`type_id`) REFERENCES order_address_type(`id`),
  582. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  583. )
  584. ENGINE = InnoDB
  585. CHARACTER SET utf8 COLLATE utf8_general_ci;
  586. CREATE TABLE `tracking_number` (
  587. `order_id` BIGINT UNSIGNED NOT NULL,
  588. `number` VARCHAR(64),
  589. CONSTRAINT pk_tracking_number PRIMARY KEY (`order_id`, `number`),
  590. INDEX idx_tracking_number_orderid(`order_id`),
  591. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  592. )
  593. ENGINE = InnoDB
  594. CHARACTER SET utf8 COLLATE utf8_general_ci;
  595. CREATE TABLE `order_change_type` (
  596. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  597. `name` VARCHAR(64),
  598. CONSTRAINT pk_order_change_type PRIMARY KEY (`id`),
  599. UNIQUE KEY idx_order_change_type(name)
  600. )
  601. ENGINE = InnoDB
  602. CHARACTER SET utf8 COLLATE utf8_general_ci;
  603. INSERT INTO order_change_type (name) VALUES ('Refund');
  604. INSERT INTO order_change_type (name) VALUES ('OrderDiscount');
  605. INSERT INTO order_change_type (name) VALUES ('ItemDiscount');
  606. INSERT INTO order_change_type (name) VALUES ('ItemQuantity');
  607. INSERT INTO order_change_type (name) VALUES ('ItemAddition'); -- i _think_ this can support back orders
  608. INSERT INTO order_change_type (name) VALUES ('ShippingAddition');
  609. /* Note: we may have to add discount type, nullable ..*/
  610. CREATE TABLE `order_change` (
  611. `order_id` BIGINT UNSIGNED NOT NULL,
  612. `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  613. `notes` TEXT,
  614. `value` DECIMAL(12,2),
  615. `type_id` TINYINT UNSIGNED NOT NULL,
  616. CONSTRAINT pk_order_change PRIMARY KEY (`order_id`,`date`),
  617. INDEX `idx_order_change_type` (`type_id`),
  618. FOREIGN KEY (`type_id`) REFERENCES `order_change_type`(`id`),
  619. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  620. )
  621. ENGINE = InnoDB
  622. CHARACTER SET utf8 COLLATE utf8_general_ci;
  623. CREATE TABLE `order_status_history` (
  624. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  625. `order_id` BIGINT UNSIGNED NOT NULL,
  626. `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  627. `notes` TEXT ,
  628. `status_id` TINYINT UNSIGNED NOT NULL,
  629. CONSTRAINT pk_order_status_history PRIMARY KEY (`id`),
  630. INDEX idx_order_status_history_order (`order_id`),
  631. INDEX idx_order_status_history_status (`status_id`),
  632. FOREIGN KEY (`status_id`) REFERENCES `order_status_type`(`id`),
  633. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  634. )
  635. ENGINE = InnoDB
  636. CHARACTER SET utf8 COLLATE utf8_general_ci;
  637. CREATE TABLE `shopping_cart` (
  638. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  639. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  640. `last_modification` TIMESTAMP,
  641. `account_id` BIGINT UNSIGNED NOT NULL,
  642. CONSTRAINT pk_shopping_cart PRIMARY KEY (`id`),
  643. -- INDEX idx_shopping_cart_status (`order_id`),
  644. FOREIGN KEY (`account_id`) REFERENCES `account`(`id`) ON DELETE CASCADE
  645. )
  646. ENGINE = InnoDB
  647. CHARACTER SET utf8 COLLATE utf8_general_ci;
  648. CREATE TABLE `block_location_type` (
  649. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  650. `name` VARCHAR(128),
  651. CONSTRAINT pk_block_location_type PRIMARY KEY (`id`),
  652. UNIQUE KEY uk_block_location_type (`name`)
  653. )
  654. ENGINE = InnoDB
  655. CHARACTER SET utf8 COLLATE utf8_general_ci;
  656. INSERT INTO block_location_type (name) VALUES ('PageHeader');
  657. INSERT INTO block_location_type (name) VALUES ('PageFooter');
  658. INSERT INTO block_location_type (name) VALUES ('RightPanel');
  659. INSERT INTO block_location_type (name) VALUES ('CenterPanel');
  660. INSERT INTO block_location_type (name) VALUES ('LeftPanel');
  661. INSERT INTO block_location_type (name) VALUES ('ExtraPanel1');
  662. INSERT INTO block_location_type (name) VALUES ('ExtraPanel2');
  663. INSERT INTO block_location_type (name) VALUES ('ExtraPanel3');
  664. INSERT INTO block_location_type (name) VALUES ('ExtraPanel4');
  665. INSERT INTO block_location_type (name) VALUES ('PageBody'); -- ie. <body> is parent, render outside container ..
  666. CREATE TABLE `content_block` (
  667. `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  668. `name` VARCHAR(128) , -- human reference, also used for CSS id
  669. `cssclass` VARCHAR(128) , -- CSS class
  670. `title` VARCHAR(128) , -- optionally visible text
  671. `description` VARCHAR(256) , -- optionally visible text, eg. on list page
  672. `show_title` BOOL NOT NULL DEFAULT FALSE,
  673. `show_description` BOOL NOT NULL DEFAULT FALSE,
  674. `collapsable` BOOL NOT NULL DEFAULT FALSE , -- optionally visible text, eg. on list page
  675. `sort_order` TINYINT UNSIGNED NOT NULL DEFAULT 0, -- ie, first or top in ul
  676. `parent_content_block_id` MEDIUMINT UNSIGNED,
  677. `location_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  678. CONSTRAINT pk_content_block PRIMARY KEY (`id`),
  679. INDEX idx_content_block_parent (`parent_content_block_id`),
  680. INDEX idx_content_block_location (`location_id`),
  681. UNIQUE KEY idx_content_block_name (`name`)
  682. )
  683. ENGINE = InnoDB
  684. CHARACTER SET utf8 COLLATE utf8_general_ci;
  685. CREATE TABLE `content_category` (
  686. `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  687. `name` VARCHAR(128) , -- human reference
  688. `title` VARCHAR(128) , -- optionally visible text
  689. `description` VARCHAR(256) , -- optionally visible text, eg. on list page
  690. `image_uri` VARCHAR(256) , -- optional image for the category
  691. `parent_content_category_id` MEDIUMINT UNSIGNED,
  692. CONSTRAINT pk_content_category PRIMARY KEY (`id`),
  693. INDEX idx_content_category_parent (`parent_content_category_id`),
  694. UNIQUE KEY idx_content_category_name (`name`)
  695. )
  696. ENGINE = InnoDB
  697. CHARACTER SET utf8 COLLATE utf8_general_ci;
  698. CREATE TABLE `product_category` (
  699. `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  700. `name` VARCHAR(128) , -- human reference
  701. `title` VARCHAR(128) , -- optionally visible text
  702. `description` VARCHAR(256) , -- optionally visible text, eg. on list page
  703. `image_uri` VARCHAR(256) , -- optional image for the category
  704. `parent_product_category_id` MEDIUMINT UNSIGNED,
  705. CONSTRAINT pk_product_category PRIMARY KEY (`id`),
  706. INDEX idx_product_category_parent (`parent_product_category_id`),
  707. UNIQUE KEY idx_product_category_name (`name`)
  708. )
  709. ENGINE = InnoDB
  710. CHARACTER SET utf8 COLLATE utf8_general_ci;
  711. CREATE TABLE `content_status_type` (
  712. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  713. `name` VARCHAR(128),
  714. CONSTRAINT pk_content_status_type PRIMARY KEY (`id`),
  715. UNIQUE KEY uk_content_status_type (`name`)
  716. )
  717. ENGINE = InnoDB
  718. CHARACTER SET utf8 COLLATE utf8_general_ci;
  719. CREATE TABLE `content_type` (
  720. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  721. `name` VARCHAR(128),
  722. CONSTRAINT pk_content_type PRIMARY KEY (`id`),
  723. UNIQUE KEY uk_content_type (`name`)
  724. )
  725. ENGINE = InnoDB
  726. CHARACTER SET utf8 COLLATE utf8_general_ci;
  727. INSERT INTO content_status_type (name) VALUES ('Published');
  728. INSERT INTO content_status_type (name) VALUES ('Unpublished');
  729. INSERT INTO content_status_type (name) VALUES ('Draft');
  730. INSERT INTO content_status_type (name) VALUES ('Internal');
  731. -- eg. the home page center column, or "about us" ..
  732. INSERT INTO content_type (name) VALUES ('PageBody');
  733. -- a news article, faq, blog - something likely listed in a pagebody with teasers ..
  734. INSERT INTO content_type (name) VALUES ('Article');
  735. -- likely to be listed, or displayed and also can be in a shopping cart ..
  736. INSERT INTO content_type (name) VALUES ('Product');
  737. INSERT INTO content_type (name) VALUES ('Image');
  738. INSERT INTO content_type (name) VALUES ('Video');
  739. INSERT INTO content_type (name) VALUES ('Audio');
  740. INSERT INTO content_type (name) VALUES ('Comment');
  741. INSERT INTO content_type (name) VALUES ('ForumPost');
  742. INSERT INTO content_type (name) VALUES ('BlogPost');
  743. -- little things that go near something else - a form instruction, image descript - small text area; ie a <span>
  744. INSERT INTO content_type (name) VALUES ('Description');
  745. CREATE TABLE `content_item` (
  746. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  747. `name` VARCHAR(128) NOT NULL, -- human reference, also used for CSS id
  748. `cssclass` VARCHAR(128) , -- CSS class
  749. `title` VARCHAR(128) , -- optionally visible text
  750. `description` VARCHAR(256) , -- optionally visible text
  751. `text` TEXT, -- use either this or uri, if this is null, we try to get uri ..
  752. `sort_order` MEDIUMINT UNSIGNED DEFAULT 0, -- ie, first or top in ul
  753. `show_title` BOOL NOT NULL DEFAULT TRUE,
  754. `show_description` BOOL NOT NULL DEFAULT FALSE,
  755. `show_creator` BOOL NOT NULL DEFAULT TRUE,
  756. `show_creation_date` BOOL NOT NULL DEFAULT TRUE,
  757. `show_last_modification` BOOL NOT NULL DEFAULT TRUE,
  758. `creator_id` BIGINT UNSIGNED DEFAULT 1,
  759. `copyright_notice` VARCHAR(256),
  760. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  761. `last_modification` TIMESTAMP,
  762. -- `is_virtual` BOOL DEFAULT FALSE, -- eg. from somewhere else in a frame ..
  763. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  764. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  765. CONSTRAINT pk_content_item PRIMARY KEY (`id`),
  766. UNIQUE KEY uk_content_name (`name`),
  767. INDEX idx_content_title (`title`),
  768. INDEX idx_content_creator (`creator_id`),
  769. INDEX idx_content_type (`type_id`),
  770. INDEX idx_content_status (`status_id`),
  771. FOREIGN KEY (`status_id`) REFERENCES `content_status_type`(`id`),
  772. FOREIGN KEY (`type_id`) REFERENCES `content_type`(`id`),
  773. FOREIGN KEY (`creator_id`) REFERENCES `person`(`id`)
  774. )
  775. ENGINE = InnoDB
  776. CHARACTER SET utf8 COLLATE utf8_general_ci;
  777. CREATE TABLE `module` (
  778. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  779. `name` VARCHAR(128) NOT NULL, -- human reference, also used for CSS id
  780. `cssclass` VARCHAR(128) , -- CSS class
  781. `title` VARCHAR(128) , -- optionally visible text
  782. `description` VARCHAR(256) , -- optionally visible text
  783. `class_name` VARCHAR(256), -- name of the active class object, a "View"
  784. `show_title` BOOL NOT NULL DEFAULT TRUE,
  785. `show_description` BOOL NOT NULL DEFAULT FALSE,
  786. `content_block_id` MEDIUMINT UNSIGNED,
  787. `parent_module_id` INT UNSIGNED,
  788. CONSTRAINT pk_module PRIMARY KEY (`id`),
  789. UNIQUE KEY uk_module_name (`name`),
  790. INDEX idx_module_block (`content_block_id`),
  791. INDEX idx_module_title (`title`),
  792. FOREIGN KEY (`parent_module_id`) REFERENCES module(`id`),
  793. FOREIGN KEY (`content_block_id`) REFERENCES `content_block`(`id`)
  794. )
  795. ENGINE = InnoDB
  796. CHARACTER SET utf8 COLLATE utf8_general_ci;
  797. CREATE TABLE `page_type` (
  798. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  799. `name` VARCHAR(128),
  800. CONSTRAINT pk_page_type PRIMARY KEY (`id`),
  801. UNIQUE KEY uk_page_type (`name`)
  802. )
  803. ENGINE = InnoDB
  804. CHARACTER SET utf8 COLLATE utf8_general_ci;
  805. INSERT INTO page_type (name) VALUES ('Basic');
  806. INSERT INTO page_type (name) VALUES ('Home');
  807. INSERT INTO page_type (name) VALUES ('Login');
  808. INSERT INTO page_type (name) VALUES ('UserHome');
  809. INSERT INTO page_type (name) VALUES ('EditContactInfo');
  810. INSERT INTO page_type (name) VALUES ('EditUsers');
  811. INSERT INTO page_type (name) VALUES ('Product');
  812. INSERT INTO page_type (name) VALUES ('ProductList');
  813. INSERT INTO page_type (name) VALUES ('ShoppingCartView');
  814. INSERT INTO page_type (name) VALUES ('Checkout');
  815. INSERT INTO page_type (name) VALUES ('Payment');
  816. INSERT INTO page_type (name) VALUES ('ShippingInfo');
  817. INSERT INTO page_type (name) VALUES ('OrderHistory');
  818. INSERT INTO page_type (name) VALUES ('Forum');
  819. INSERT INTO page_type (name) VALUES ('ForumList');
  820. INSERT INTO page_type (name) VALUES ('Article');
  821. INSERT INTO page_type (name) VALUES ('ArticleList');
  822. INSERT INTO page_type (name) VALUES ('Admin');
  823. CREATE TABLE `page_doc_type` (
  824. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  825. `name` VARCHAR(128),
  826. CONSTRAINT pk_page_doc_type PRIMARY KEY (`id`),
  827. UNIQUE KEY uk_page_doc_type (`name`)
  828. )
  829. ENGINE = InnoDB
  830. CHARACTER SET utf8 COLLATE utf8_general_ci;
  831. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
  832. INSERT INTO page_doc_type (name) VALUES ('PDF');
  833. INSERT INTO page_doc_type (name) VALUES ('TEXT');
  834. INSERT INTO page_doc_type (name) VALUES ('RSS');
  835. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">');
  836. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
  837. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">');
  838. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
  839. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">');
  840. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">');
  841. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">');
  842. INSERT INTO page_doc_type (name) VALUES ('<!DOCTYPE HTML PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.1//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd">');
  843. CREATE TABLE `page_status_type` (
  844. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  845. `name` VARCHAR(128),
  846. CONSTRAINT pk_page_status_type PRIMARY KEY (`id`),
  847. UNIQUE KEY uk_page_status_type (`name`)
  848. )
  849. ENGINE = InnoDB
  850. CHARACTER SET utf8 COLLATE utf8_general_ci;
  851. INSERT INTO page_status_type (name) VALUES ('Published');
  852. INSERT INTO page_status_type (name) VALUES ('Unpublished');
  853. INSERT INTO page_status_type (name) VALUES ('Draft');
  854. INSERT INTO page_status_type (name) VALUES ('Internal');
  855. CREATE TABLE `html_meta_tag`(
  856. `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  857. `name` VARCHAR(128) , -- human reference
  858. `content` VARCHAR(256) ,
  859. `type` ENUM('NAME','HTTP-EQUIV') DEFAULT 'NAME',
  860. CONSTRAINT pk_html_meta_tag PRIMARY KEY (`id`),
  861. INDEX idx_html_meta_tag_name (`name`)
  862. )
  863. ENGINE = InnoDB
  864. CHARACTER SET utf8 COLLATE utf8_general_ci;
  865. CREATE TABLE `style_sheet`(
  866. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  867. `name` VARCHAR(128) , -- human reference
  868. `description` VARCHAR(256) ,
  869. `filename` VARCHAR(128) ,
  870. `type` ENUM('HTML','XML') DEFAULT 'HTML',
  871. CONSTRAINT pk_style_sheet PRIMARY KEY (`id`),
  872. INDEX idx_style_sheet_name (`name`)
  873. )
  874. ENGINE = InnoDB
  875. CHARACTER SET utf8 COLLATE utf8_general_ci;
  876. CREATE TABLE `java_script`(
  877. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  878. `name` VARCHAR(128) , -- human reference
  879. `description` VARCHAR(256) ,
  880. `filename` VARCHAR(128) ,
  881. CONSTRAINT pk_java_script PRIMARY KEY (`id`),
  882. INDEX idx_java_script_name (`name`)
  883. )
  884. ENGINE = InnoDB
  885. CHARACTER SET utf8 COLLATE utf8_general_ci;
  886. CREATE TABLE `page` (
  887. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  888. `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  889. `last_modification` TIMESTAMP,
  890. `name` VARCHAR(128) , -- human reference
  891. `title` VARCHAR(256) ,
  892. `uri` VARCHAR(256) DEFAULT 'index.php',
  893. `has_header` BOOL NOT NULL DEFAULT TRUE,
  894. `has_left_column` BOOL NOT NULL DEFAULT TRUE,
  895. `has_right_column` BOOL NOT NULL DEFAULT TRUE,
  896. `has_footer` BOOL NOT NULL DEFAULT TRUE,
  897. `type_id` TINYINT UNSIGNED DEFAULT 1,
  898. `doc_type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  899. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  900. CONSTRAINT pk_page PRIMARY KEY (`id`),
  901. INDEX idx_page_doc_type (`doc_type_id`),
  902. INDEX idx_page_type (`type_id`),
  903. INDEX idx_page_status (`status_id`),
  904. UNIQUE KEY idx_page_name (`name`),
  905. FOREIGN KEY (`status_id`) REFERENCES `page_status_type`(`id`),
  906. FOREIGN KEY (`type_id`) REFERENCES `page_type`(`id`),
  907. FOREIGN KEY (`doc_type_id`) REFERENCES `page_doc_type`(`id`)
  908. )
  909. ENGINE = InnoDB
  910. CHARACTER SET utf8 COLLATE utf8_general_ci;
  911. CREATE TABLE `menu_status_type` (
  912. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  913. `name` VARCHAR(128),
  914. CONSTRAINT pk_menu_status_type PRIMARY KEY (`id`),
  915. UNIQUE KEY uk_menu_status_type (`name`)
  916. )
  917. ENGINE = InnoDB
  918. CHARACTER SET utf8 COLLATE utf8_general_ci;
  919. INSERT INTO menu_status_type (name) VALUES ('Active');
  920. INSERT INTO menu_status_type (name) VALUES ('Disabled');
  921. CREATE TABLE `menu_item_type` (
  922. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  923. `name` VARCHAR(128),
  924. CONSTRAINT pk_menu_item_type PRIMARY KEY (`id`),
  925. UNIQUE KEY uk_menu_item_type (`name`)
  926. )
  927. ENGINE = InnoDB
  928. CHARACTER SET utf8 COLLATE utf8_general_ci;
  929. INSERT INTO menu_item_type (name) VALUES ('ListMenuItem'); -- the usual <li>
  930. INSERT INTO menu_item_type (name) VALUES ('TabMenuItem'); -- basically show/hide a div, may be AJAX
  931. INSERT INTO menu_item_type (name) VALUES ('BlockMenuItem'); -- a div block, optionally with embedded HTML
  932. INSERT INTO menu_item_type (name) VALUES ('LinkMenuItem'); -- <a> link anywhere in a page ..
  933. CREATE TABLE `menu_type` (
  934. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  935. `name` VARCHAR(128),
  936. CONSTRAINT pk_menu_type PRIMARY KEY (`id`),
  937. UNIQUE KEY uk_menu_type (`name`)
  938. )
  939. ENGINE = InnoDB
  940. CHARACTER SET utf8 COLLATE utf8_general_ci;
  941. INSERT INTO menu_type (name) VALUES ('SideBar');
  942. INSERT INTO menu_type (name) VALUES ('Header');
  943. INSERT INTO menu_type (name) VALUES ('Tabbed');
  944. INSERT INTO menu_type (name) VALUES ('Footer');
  945. CREATE TABLE `menu_item` (
  946. `id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  947. `name` VARCHAR(64) NOT NULL, -- human reference
  948. `css_class` VARCHAR(32) ,
  949. `label` VARCHAR(32) , -- text on the menu item
  950. `uri` VARCHAR(256) NOT NULL, -- either a Page name (eg. Home, ContactUs) or remote link
  951. `is_local` BOOL NOT NULL DEFAULT TRUE, -- false for external links
  952. `is_ssl` BOOL NOT NULL DEFAULT FALSE, -- false for external links
  953. `sort_order` TINYINT UNSIGNED NOT NULL DEFAULT 0, -- ie, first or top in ul
  954. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  955. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  956. `page_id` BIGINT UNSIGNED DEFAULT 0, -- refers to the page we point to, zero for external links
  957. CONSTRAINT pk_menu_item PRIMARY KEY (`id`),
  958. UNIQUE KEY idx_menu_item_name (`name`),
  959. INDEX idx_menu_item_type (`type_id`),
  960. INDEX idx_menu_item_status (`status_id`),
  961. FOREIGN KEY (`status_id`) REFERENCES `menu_status_type`(`id`),
  962. FOREIGN KEY (`type_id`) REFERENCES `menu_item_type`(`id`),
  963. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE
  964. )
  965. ENGINE = InnoDB
  966. CHARACTER SET utf8 COLLATE utf8_general_ci;
  967. CREATE TABLE `menu` (
  968. `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  969. `name` VARCHAR(64) NOT NULL , -- human reference
  970. `title` VARCHAR(32) , -- visible text
  971. `css_class` VARCHAR(32) ,
  972. `sort_order` TINYINT UNSIGNED DEFAULT 0, -- ie, first or top in ul
  973. `show_title` BOOL DEFAULT TRUE,
  974. `parent_menu_item_id` MEDIUMINT UNSIGNED DEFAULT 0, -- ie, this is a submenu within a menu_item
  975. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  976. `type_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  977. CONSTRAINT pk_menu PRIMARY KEY (`id`),
  978. INDEX idx_menu_item (`parent_menu_item_id`),
  979. INDEX idx_menu_type (`type_id`),
  980. INDEX idx_menu_status (`status_id`),
  981. UNIQUE KEY idx_menu_name (`name`),
  982. FOREIGN KEY (`status_id`) REFERENCES `menu_status_type`(`id`),
  983. FOREIGN KEY (`type_id`) REFERENCES `menu_type`(`id`),
  984. FOREIGN KEY (`parent_menu_item_id`) REFERENCES `menu_item`(`id`)
  985. )
  986. ENGINE = InnoDB
  987. CHARACTER SET utf8 COLLATE utf8_general_ci;
  988. CREATE TABLE `order_item_status_type` (
  989. `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  990. `name` VARCHAR(128),
  991. CONSTRAINT pk_order_item_status_type PRIMARY KEY (`id`),
  992. UNIQUE KEY uk_order_item_status_type (`name`)
  993. )
  994. ENGINE = InnoDB
  995. CHARACTER SET utf8 COLLATE utf8_general_ci;
  996. INSERT INTO order_item_status_type (name) VALUES ('Ordered');
  997. INSERT INTO order_item_status_type (name) VALUES ('Processing');
  998. INSERT INTO order_item_status_type (name) VALUES ('BackOrdered');
  999. INSERT INTO order_item_status_type (name) VALUES ('Shipped');
  1000. INSERT INTO order_item_status_type (name) VALUES ('Returned');
  1001. INSERT INTO order_item_status_type (name) VALUES ('Cancelled');
  1002. INSERT INTO order_item_status_type (name) VALUES ('Internal');
  1003. /*****************************************************************
  1004. Association tables
  1005. ******************************************************************/
  1006. CREATE TABLE `order_item` (
  1007. `order_id` BIGINT UNSIGNED NOT NULL,
  1008. `product_id` BIGINT UNSIGNED NOT NULL,
  1009. `quantity` MEDIUMINT UNSIGNED NOT NULL DEFAULT 1,
  1010. `status_id` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  1011. CONSTRAINT pk_order_product PRIMARY KEY (`product_id`,`order_id`),
  1012. INDEX idx_order_item_order (`order_id`),
  1013. INDEX idx_order_item_product (`product_id`),
  1014. FOREIGN KEY (`status_id` ) REFERENCES order_item_status_type(`id`),
  1015. FOREIGN KEY (`product_id` ) REFERENCES product(`id`),
  1016. FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
  1017. )
  1018. ENGINE = InnoDB
  1019. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1020. CREATE TABLE `shopping_cart_item` (
  1021. `shopping_cart_id` BIGINT UNSIGNED NOT NULL,
  1022. `product_id` BIGINT UNSIGNED NOT NULL,
  1023. `quantity` MEDIUMINT UNSIGNED NOT NULL DEFAULT 1,
  1024. CONSTRAINT pk_shopping_cart_product PRIMARY KEY (`product_id`,`shopping_cart_id`),
  1025. INDEX idx_shopping_cart_product_shopping_cart (`shopping_cart_id`),
  1026. INDEX idx_shopping_cart_product_product (`product_id`),
  1027. FOREIGN KEY (`product_id` ) REFERENCES product(`id`) ON DELETE CASCADE,
  1028. FOREIGN KEY (`shopping_cart_id`) REFERENCES `shopping_cart`(`id`) ON DELETE CASCADE
  1029. )
  1030. ENGINE = InnoDB
  1031. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1032. CREATE TABLE `related_product_assn` (
  1033. product_id BIGINT UNSIGNED NOT NULL,
  1034. related_product_id BIGINT UNSIGNED NOT NULL,
  1035. FOREIGN KEY (`product_id`) REFERENCES product(`id`) ON DELETE CASCADE,
  1036. FOREIGN KEY (`related_product_id`) REFERENCES product(`id`) ON DELETE CASCADE
  1037. )
  1038. ENGINE = InnoDB
  1039. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1040. CREATE TABLE `product_product_category_assn` (
  1041. `product_id` BIGINT UNSIGNED NOT NULL,
  1042. `product_category_id` MEDIUMINT UNSIGNED NOT NULL,
  1043. CONSTRAINT pk_product_product_category PRIMARY KEY (`product_category_id`,`product_id`),
  1044. INDEX idx_product_product_category_product(`product_id`),
  1045. INDEX idx_product_product_category_product_category(`product_category_id`),
  1046. FOREIGN KEY (`product_category_id`) REFERENCES product_category(`id`) ON DELETE CASCADE,
  1047. FOREIGN KEY (`product_id`) REFERENCES product(`id`) ON DELETE CASCADE
  1048. )
  1049. ENGINE = InnoDB
  1050. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1051. CREATE TABLE `person_usergroup_assn` (
  1052. `person_id` BIGINT UNSIGNED NOT NULL,
  1053. `usergroup_id` MEDIUMINT UNSIGNED NOT NULL DEFAULT 1,
  1054. CONSTRAINT pk_person_usergroup PRIMARY KEY (`usergroup_id`,`person_id`),
  1055. INDEX idx_person_usergroup_person(`person_id`),
  1056. INDEX idx_person_usergroup_usergroup(`usergroup_id`),
  1057. FOREIGN KEY (`usergroup_id`) REFERENCES usergroup(`id`) ON DELETE CASCADE,
  1058. FOREIGN KEY (`person_id`) REFERENCES person(`id`) ON DELETE CASCADE
  1059. )
  1060. ENGINE = InnoDB
  1061. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1062. CREATE TABLE `content_item_usergroup_assn` (
  1063. `content_item_id` INT UNSIGNED NOT NULL,
  1064. `usergroup_id` MEDIUMINT UNSIGNED NOT NULL,
  1065. CONSTRAINT pk_content_item_usergroup PRIMARY KEY (`usergroup_id`,`content_item_id`),
  1066. INDEX idx_content_item_usergroup_content_item(`content_item_id`),
  1067. INDEX idx_content_item_usergroup_usergroup(`usergroup_id`),
  1068. FOREIGN KEY (`usergroup_id`) REFERENCES usergroup(`id`) ON DELETE CASCADE,
  1069. FOREIGN KEY (`content_item_id`) REFERENCES content_item(`id`) ON DELETE CASCADE
  1070. )
  1071. ENGINE = InnoDB
  1072. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1073. CREATE TABLE `page_content_category_assn` (
  1074. `page_id` BIGINT UNSIGNED NOT NULL,
  1075. `content_category_id` MEDIUMINT UNSIGNED NOT NULL,
  1076. CONSTRAINT pk_page_content_category PRIMARY KEY (`content_category_id`,`page_id`),
  1077. INDEX idx_page_content_category_page(`page_id`),
  1078. INDEX idx_page_content_category_content_category(`content_category_id`),
  1079. FOREIGN KEY (`content_category_id`) REFERENCES content_category(`id`) ON DELETE CASCADE,
  1080. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE
  1081. )
  1082. ENGINE = InnoDB
  1083. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1084. CREATE TABLE `page_usergroup_assn` (
  1085. `page_id` BIGINT UNSIGNED NOT NULL,
  1086. `usergroup_id` MEDIUMINT UNSIGNED NOT NULL,
  1087. CONSTRAINT pk_page_usergroup PRIMARY KEY (`usergroup_id`,`page_id`),
  1088. INDEX idx_page_usergroup_page(`page_id`),
  1089. INDEX idx_page_usergroup_usergroup(`usergroup_id`),
  1090. FOREIGN KEY (`usergroup_id`) REFERENCES usergroup(`id`) ON DELETE CASCADE,
  1091. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE
  1092. )
  1093. ENGINE = InnoDB
  1094. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1095. CREATE TABLE `page_html_meta_tag_assn` (
  1096. `page_id` BIGINT UNSIGNED NOT NULL,
  1097. `html_meta_tag_id` MEDIUMINT UNSIGNED NOT NULL,
  1098. CONSTRAINT pk_page_html_meta_tag PRIMARY KEY (`html_meta_tag_id`,`page_id`),
  1099. INDEX idx_page_html_meta_tag_page(`page_id`),
  1100. INDEX idx_page_html_meta_tag_html_meta_tag(`html_meta_tag_id`),
  1101. FOREIGN KEY (`html_meta_tag_id`) REFERENCES html_meta_tag(`id`) ON DELETE CASCADE,
  1102. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE
  1103. )
  1104. ENGINE = InnoDB
  1105. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1106. CREATE TABLE `page_style_sheet_assn` (
  1107. `page_id` BIGINT UNSIGNED NOT NULL,
  1108. `style_sheet_id` BIGINT UNSIGNED NOT NULL,
  1109. CONSTRAINT pk_page_style_sheet PRIMARY KEY (`style_sheet_id`,`page_id`),
  1110. INDEX idx_page_style_sheet_page(`page_id`),
  1111. INDEX idx_page_style_sheet_style_sheet(`style_sheet_id`),
  1112. FOREIGN KEY (`style_sheet_id`) REFERENCES style_sheet(`id`) ON DELETE CASCADE,
  1113. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE
  1114. )
  1115. ENGINE = InnoDB
  1116. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1117. CREATE TABLE `page_java_script_assn` (
  1118. `page_id` BIGINT UNSIGNED NOT NULL,
  1119. `java_script_id` BIGINT UNSIGNED NOT NULL,
  1120. CONSTRAINT pk_page_java_script PRIMARY KEY (`java_script_id`,`page_id`),
  1121. INDEX idx_page_java_script_page(`page_id`),
  1122. INDEX idx_page_java_script_java_script(`java_script_id`),
  1123. FOREIGN KEY (`java_script_id`) REFERENCES java_script(`id`) ON DELETE CASCADE,
  1124. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE
  1125. )
  1126. ENGINE = InnoDB
  1127. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1128. CREATE TABLE `menu_content_block_assn` (
  1129. `menu_id` SMALLINT UNSIGNED NOT NULL,
  1130. `content_block_id` MEDIUMINT UNSIGNED NOT NULL,
  1131. CONSTRAINT pk_menu_content_block PRIMARY KEY (`content_block_id`,`menu_id`),
  1132. INDEX idx_menu_content_block_menu(`menu_id`),
  1133. INDEX idx_menu_content_block_content_block(`content_block_id`),
  1134. FOREIGN KEY (`content_block_id`) REFERENCES content_block(`id`) ON DELETE CASCADE,
  1135. FOREIGN KEY (`menu_id`) REFERENCES menu(`id`) ON DELETE CASCADE
  1136. )
  1137. ENGINE = InnoDB
  1138. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1139. CREATE TABLE `content_item_content_block_assn` (
  1140. `content_item_id` INT UNSIGNED NOT NULL,
  1141. `content_block_id` MEDIUMINT UNSIGNED NOT NULL,
  1142. CONSTRAINT pk_content_item_content_block PRIMARY KEY (`content_block_id`,`content_item_id`),
  1143. INDEX idx_content_item_content_block_content_item(`content_item_id`),
  1144. INDEX idx_content_item_content_block_content_block(`content_block_id`),
  1145. FOREIGN KEY (`content_block_id`) REFERENCES content_block(`id`) ON DELETE CASCADE,
  1146. FOREIGN KEY (`content_item_id`) REFERENCES content_item(`id`) ON DELETE CASCADE
  1147. )
  1148. ENGINE = InnoDB
  1149. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1150. CREATE TABLE `content_item_content_category_assn` (
  1151. `content_item_id` INT UNSIGNED NOT NULL,
  1152. `content_category_id` MEDIUMINT UNSIGNED NOT NULL,
  1153. CONSTRAINT pk_content_item_content_category PRIMARY KEY (`content_category_id`,`content_item_id`),
  1154. INDEX idx_content_item_content_category_content_item(`content_item_id`),
  1155. INDEX idx_content_item_content_category_content_category(`content_category_id`),
  1156. FOREIGN KEY (`content_category_id`) REFERENCES content_category(`id`) ON DELETE CASCADE,
  1157. FOREIGN KEY (`content_item_id`) REFERENCES content_item(`id`) ON DELETE CASCADE
  1158. )
  1159. ENGINE = InnoDB
  1160. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1161. CREATE TABLE `content_block_page_assn` (
  1162. `content_block_id` MEDIUMINT UNSIGNED NOT NULL,
  1163. `page_id` BIGINT UNSIGNED NOT NULL,
  1164. CONSTRAINT pk_content_block_page PRIMARY KEY (`page_id`,`content_block_id`),
  1165. INDEX idx_content_block_page_content_block(`content_block_id`),
  1166. INDEX idx_content_block_page_page(`page_id`),
  1167. FOREIGN KEY (`page_id`) REFERENCES page(`id`) ON DELETE CASCADE,
  1168. FOREIGN KEY (`content_block_id`) REFERENCES content_block(`id`) ON DELETE CASCADE
  1169. )
  1170. ENGINE = InnoDB
  1171. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1172. CREATE TABLE `menu_item_menu_assn` (
  1173. `menu_item_id` MEDIUMINT UNSIGNED NOT NULL,
  1174. `menu_id` SMALLINT UNSIGNED NOT NULL,
  1175. CONSTRAINT pk_menu_item_menu PRIMARY KEY (`menu_id`,`menu_item_id`),
  1176. INDEX idx_menu_item_menu_menu_item(`menu_item_id`),
  1177. INDEX idx_menu_item_menu_menu(`menu_id`),
  1178. FOREIGN KEY (`menu_id`) REFERENCES menu(`id`) ON DELETE CASCADE,
  1179. FOREIGN KEY (`menu_item_id`) REFERENCES menu_item(`id`) ON DELETE CASCADE
  1180. )
  1181. ENGINE = InnoDB
  1182. CHARACTER SET utf8 COLLATE utf8_general_ci;
  1183. INSERT INTO `country_type` (`id`, `name`, `iso_code_2`, `iso_code_3`) VALUES
  1184. (255, 'World', '--', '---'),
  1185. (1, 'Afghanistan', 'AF', 'AFG'),
  1186. (2, 'Albania', 'AL', 'ALB'),
  1187. (3, 'Algeria', 'DZ', 'DZA'),
  1188. (4, 'American Samoa', 'AS', 'ASM'),
  1189. (5, 'Andorra', 'AD', 'AND'),
  1190. (6, 'Angola', 'AO', 'AGO'),
  1191. (7, 'Anguilla', 'AI', 'AIA'),
  1192. (8, 'Antarctica', 'AQ', 'ATA'),
  1193. (9, 'Antigua and Barbuda', 'AG', 'ATG'),
  1194. (10, 'Argentina', 'AR', 'ARG'),
  1195. (11, 'Armenia', 'AM', 'ARM'),
  1196. (12, 'Aruba', 'AW', 'ABW'),
  1197. (13, 'Australia', 'AU', 'AUS'),
  1198. (14, 'Austria', 'AT', 'AUT'),
  1199. (15, 'Azerbaijan', 'AZ', 'AZE'),
  1200. (16, 'Bahamas', 'BS', 'BHS'),
  1201. (17, 'Bahrain', 'BH', 'BHR'),
  1202. (18, 'Bangladesh', 'BD', 'BGD'),
  1203. (19, 'Barbados', 'BB', 'BRB'),
  1204. (20, 'Belarus', 'BY', 'BLR'),
  1205. (21, 'Belgium', 'BE', 'BEL'),
  1206. (22, 'Belize', 'BZ', 'BLZ'),
  1207. (23, 'Benin', 'BJ', 'BEN'),
  1208. (24, 'Bermuda', 'BM', 'BMU'),
  1209. (25, 'Bhutan', 'BT', 'BTN'),
  1210. (26, 'Bolivia', 'BO', 'BOL'),
  1211. (27, 'Bosnia-Herzegovina', 'BA', 'BIH'),
  1212. (28, 'Botswana', 'BW', 'BWA'),
  1213. (29, 'Bouvet Island', 'BV', 'BVT'),
  1214. (30, 'Brazil', 'BR', 'BRA'),
  1215. (31, 'British Indian Ocean Territory', 'IO', 'IOT'),
  1216. (32, 'Brunei Darussalam', 'BN', 'BRN'),
  1217. (33, 'Bulgaria', 'BG', 'BGR'),
  1218. (34, 'Burkina Faso', 'BF', 'BFA'),
  1219. (35, 'Burundi', 'BI', 'BDI'),
  1220. (36, 'Cambodia', 'KH', 'KHM'),
  1221. (37, 'Cameroon', 'CM', 'CMR'),
  1222. (38, 'Canada', 'CA', 'CAN'),
  1223. (39, 'Cape Verde', 'CV', 'CPV'),
  1224. (40, 'Cayman Islands', 'KY', 'CYM'),
  1225. (41, 'Central African Republic', 'CF', 'CAF'),
  1226. (42, 'Chad', 'TD', 'TCD'),
  1227. (43, 'Chile', 'CL', 'CHL'),
  1228. (44, 'China', 'CN', 'CHN'),
  1229. (45, 'Christmas Island', 'CX', 'CXR'),
  1230. (46, 'Cocos (Keeling) Islands', 'CC', 'CCK'),
  1231. (47, 'Colombia', 'CO', 'COL'),
  1232. (48, 'Comoros', 'KM', 'COM'),
  1233. (49, 'Congo', 'CG', 'COG'),
  1234. (50, 'Cook Islands', 'CK', 'COK'),
  1235. (51, 'Costa Rica', 'CR', 'CRI'),
  1236. (52, 'Cote D''Ivoire', 'CI', 'CIV'),
  1237. (53, 'Croatia', 'HR', 'HRV'),
  1238. (54, 'Cuba', 'CU', 'CUB'),
  1239. (55, 'Cyprus', 'CY', 'CYP'),
  1240. (56, 'Czech Republic', 'CZ', 'CZE'),
  1241. (57, 'Denmark', 'DK', 'DNK'),
  1242. (58, 'Djibouti', 'DJ', 'DJI'),
  1243. (59, 'Dominica', 'DM', 'DMA'),
  1244. (60, 'Dominican Republic', 'DO', 'DOM'),
  1245. (61, 'East Timor', 'TP', 'TMP'),
  1246. (62, 'Ecuador', 'EC', 'ECU'),
  1247. (63, 'Egypt', 'EG', 'EGY'),
  1248. (64, 'El Salvador', 'SV', 'SLV'),
  1249. (65, 'Equatorial Guinea', 'GQ', 'GNQ'),
  1250. (66, 'Eritrea', 'ER', 'ERI'),
  1251. (67, 'Estonia', 'EE', 'EST'),
  1252. (68, 'Ethiopia', 'ET', 'ETH'),
  1253. (69, 'Falkland Islands (Malvinas)', 'FK', 'FLK'),
  1254. (70, 'Faroe Islands', 'FO', 'FRO'),
  1255. (71, 'Fiji', 'FJ', 'FJI'),
  1256. (72, 'Finland', 'FI', 'FIN'),
  1257. (73, 'France', 'FR', 'FRA'),
  1258. (74, 'France, Metropolitan', 'FX', 'FXX'),
  1259. (75, 'French Guiana', 'GF', 'GUF'),
  1260. (76, 'French Polynesia', 'PF', 'PYF'),
  1261. (77, 'French Southern Territories', 'TF', 'ATF'),
  1262. (78, 'Gabon', 'GA', 'GAB'),
  1263. (79, 'Gambia', 'GM', 'GMB'),
  1264. (80, 'Georgia', 'GE', 'GEO'),
  1265. (81, 'Germany', 'DE', 'DEU'),
  1266. (82, 'Ghana', 'GH', 'GHA'),
  1267. (83, 'Gibraltar', 'GI', 'GIB'),
  1268. (84, 'Greece', 'GR', 'GRC'),
  1269. (85, 'Greenland', 'GL', 'GRL'),
  1270. (86, 'Grenada', 'GD', 'GRD'),
  1271. (87, 'Guadeloupe', 'GP', 'GLP'),
  1272. (88, 'Guam', 'GU', 'GUM'),
  1273. (89, 'Guatemala', 'GT', 'GTM'),
  1274. (90, 'Guinea', 'GN', 'GIN'),
  1275. (91, 'Guinea-bissau', 'GW', 'GNB'),
  1276. (92, 'Guyana', 'GY', 'GUY'),
  1277. (93, 'Haiti', 'HT', 'HTI'),
  1278. (94, 'Heard and Mc Donald Islands', 'HM', 'HMD'),
  1279. (95, 'Honduras', 'HN', 'HND'),
  1280. (96, 'Hong Kong', 'HK', 'HKG'),
  1281. (97, 'Hungary', 'HU', 'HUN'),
  1282. (98, 'Iceland', 'IS', 'ISL'),
  1283. (99, 'India', 'IN', 'IND'),
  1284. (100, 'Indonesia', 'ID', 'IDN'),
  1285. (101, 'Iran (Islamic Republic of)', 'IR', 'IRN'),
  1286. (102, 'Iraq', 'IQ', 'IRQ'),
  1287. (103, 'Ireland', 'IE', 'IRL'),
  1288. (104, 'Israel', 'IL', 'ISR'),
  1289. (105, 'Italy', 'IT', 'ITA'),
  1290. (106, 'Jamaica', 'JM', 'JAM'),
  1291. (107, 'Japan', 'JP', 'JPN'),
  1292. (108, 'Jordan', 'JO', 'JOR'),
  1293. (109, 'Kazakhstan', 'KZ', 'KAZ'),
  1294. (110, 'Kenya', 'KE', 'KEN'),
  1295. (111, 'Kiribati', 'KI', 'KIR'),
  1296. (112, 'Korea, Democratic People''s Republic of', 'KP', 'PRK'),
  1297. (113, 'Korea, Republic of', 'KR', 'KOR'),
  1298. (114, 'Kuwait', 'KW', 'KWT'),
  1299. (115, 'Kyrgyzstan', 'KG', 'KGZ'),
  1300. (116, 'Lao People''s Democratic Republic', 'LA', 'LAO'),
  1301. (117, 'Latvia', 'LV', 'LVA'),
  1302. (118, 'Lebanon', 'LB', 'LBN'),
  1303. (119, 'Lesotho', 'LS', 'LSO'),
  1304. (120, 'Liberia', 'LR', 'LBR'),
  1305. (121, 'Libyan Arab Jamahiriya', 'LY', 'LBY'),
  1306. (122, 'Liechtenstein', 'LI', 'LIE'),
  1307. (123, 'Lithuania', 'LT', 'LTU'),
  1308. (124, 'Luxembourg', 'LU', 'LUX'),
  1309. (125, 'Macau', 'MO', 'MAC'),
  1310. (126, 'Macedonia, The Former Yugoslav Republic of', 'MK', 'MKD'),
  1311. (127, 'Madagascar', 'MG', 'MDG'),
  1312. (128, 'Malawi', 'MW', 'MWI'),
  1313. (129, 'Malaysia', 'MY', 'MYS'),
  1314. (130, 'Maldives', 'MV', 'MDV'),
  1315. (131, 'Mali', 'ML', 'MLI'),
  1316. (132, 'Malta', 'MT', 'MLT'),
  1317. (133, 'Marshall Islands', 'MH', 'MHL'),
  1318. (134, 'Martinique', 'MQ', 'MTQ'),
  1319. (135, 'Mauritania', 'MR', 'MRT'),
  1320. (136, 'Mauritius', 'MU', 'MUS'),
  1321. (137, 'Mayotte', 'YT', 'MYT'),
  1322. (138, 'Mexico', 'MX', 'MEX'),
  1323. (139, 'Micronesia, Federated States of', 'FM', 'FSM'),
  1324. (140, 'Moldova, Republic of', 'MD', 'MDA'),
  1325. (141, 'Monaco', 'MC', 'MCO'),
  1326. (142, 'Mongolia', 'MN', 'MNG'),
  1327. (143, 'Montserrat', 'MS', 'MSR'),
  1328. (144, 'Morocco', 'MA', 'MAR'),
  1329. (145, 'Mozambique', 'MZ', 'MOZ'),
  1330. (146, 'Myanmar', 'MM', 'MMR'),
  1331. (147, 'Namibia', 'NA', 'NAM'),
  1332. (148, 'Nauru', 'NR', 'NRU'),
  1333. (149, 'Nepal', 'NP', 'NPL'),
  1334. (150, 'Netherlands', 'NL', 'NLD'),
  1335. (151, 'Netherlands Antilles', 'AN', 'ANT'),
  1336. (152, 'New Caledonia', 'NC', 'NCL'),
  1337. (153, 'New Zealand', 'NZ', 'NZL'),
  1338. (154, 'Nicaragua', 'NI', 'NIC'),
  1339. (155, 'Niger', 'NE', 'NER'),
  1340. (156, 'Nigeria', 'NG', 'NGA'),
  1341. (157, 'Niue', 'NU', 'NIU'),
  1342. (158, 'Norfolk Island', 'NF', 'NFK'),
  1343. (159, 'Northern Mariana Islands', 'MP', 'MNP'),
  1344. (160, 'Norway', 'NO', 'NOR'),
  1345. (161, 'Oman', 'OM', 'OMN'),
  1346. (162, 'Pakistan', 'PK', 'PAK'),
  1347. (163, 'Palau', 'PW', 'PLW'),
  1348. (164, 'Panama', 'PA', 'PAN'),
  1349. (165, 'Papua New Guinea', 'PG', 'PNG'),
  1350. (166, 'Paraguay', 'PY', 'PRY'),
  1351. (167, 'Peru', 'PE', 'PER'),
  1352. (168, 'Philippines', 'PH', 'PHL'),
  1353. (169, 'Pitcairn', 'PN', 'PCN'),
  1354. (170, 'Poland', 'PL', 'POL'),
  1355. (171, 'Portugal', 'PT', 'PRT'),
  1356. (172, 'Puerto Rico', 'PR', 'PRI'),
  1357. (173, 'Qatar', 'QA', 'QAT'),
  1358. (174, 'Reunion', 'RE', 'REU'),
  1359. (175, 'Romania', 'RO', 'ROM'),
  1360. (176, 'Russian Federation', 'RU', 'RUS'),
  1361. (177, 'Rwanda', 'RW', 'RWA'),
  1362. (178, 'Saint Kitts and Nevis', 'KN', 'KNA'),
  1363. (179, 'Saint Lucia', 'LC', 'LCA'),
  1364. (180, 'Saint Vincent and the Grenadines', 'VC', 'VCT'),
  1365. (181, 'Samoa', 'WS', 'WSM'),
  1366. (182, 'San Marino', 'SM', 'SMR'),
  1367. (183, 'Sao Tome and Principe', 'ST', 'STP'),
  1368. (184, 'Saudi Arabia', 'SA', 'SAU'),
  1369. (185, 'Senegal', 'SN', 'SEN'),
  1370. (186, 'Seychelles', 'SC', 'SYC'),
  1371. (187, 'Sierra Leone', 'SL', 'SLE'),
  1372. (188, 'Singapore', 'SG', 'SGP'),
  1373. (189, 'Slovakia (Slovak Republic)', 'SK', 'SVK'),
  1374. (190, 'Slovenia', 'SI', 'SVN'),
  1375. (191, 'Solomon Islands', 'SB', 'SLB'),
  1376. (192, 'Somalia', 'SO', 'SOM'),
  1377. (193, 'South Africa', 'ZA', 'ZAF'),
  1378. (194, 'South Georgia and the South Sandwich Islands', 'GS', 'SGS'),
  1379. (195, 'Spain', 'ES', 'ESP'),
  1380. (196, 'Sri Lanka', 'LK', 'LKA'),
  1381. (197, 'St. Helena', 'SH', 'SHN'),
  1382. (198, 'St. Pierre and Miquelon', 'PM', 'SPM'),
  1383. (199, 'Sudan', 'SD', 'SDN'),
  1384. (200, 'Suriname', 'SR', 'SUR'),
  1385. (201, 'Svalbard and Jan Mayen Islands', 'SJ', 'SJM'),
  1386. (202, 'Swaziland', 'SZ', 'SWZ'),
  1387. (203, 'Sweden', 'SE', 'SWE'),
  1388. (204, 'Switzerland', 'CH', 'CHE'),
  1389. (205, 'Syrian Arab Republic', 'SY', 'SYR'),
  1390. (206, 'Taiwan', 'TW', 'TWN'),
  1391. (207, 'Tajikistan', 'TJ', 'TJK'),
  1392. (208, 'Tanzania, United Republic of', 'TZ', 'TZA'),
  1393. (209, 'Thailand', 'TH', 'THA'),
  1394. (210, 'Togo', 'TG', 'TGO'),
  1395. (211, 'Tokelau', 'TK', 'TKL'),
  1396. (212, 'Tonga', 'TO', 'TON'),
  1397. (213, 'Trinidad and Tobago', 'TT', 'TTO'),
  1398. (214, 'Tunisia', 'TN', 'TUN'),
  1399. (215, 'Turkey', 'TR', 'TUR'),
  1400. (216, 'Turkmenistan', 'TM', 'TKM'),
  1401. (217, 'Turks and Caicos Islands', 'TC', 'TCA'),
  1402. (218, 'Tuvalu', 'TV', 'TUV'),
  1403. (219, 'Uganda', 'UG', 'UGA'),
  1404. (220, 'Ukraine', 'UA', 'UKR'),
  1405. (221, 'United Arab Emirates', 'AE', 'ARE'),
  1406. (222, 'United Kingdom', 'GB', 'GBR'),
  1407. (223, 'United States', 'US', 'USA'),
  1408. (224, 'United States Minor Outlying Islands', 'UM', 'UMI'),
  1409. (225, 'Uruguay', 'UY', 'URY'),
  1410. (226, 'Uzbekistan', 'UZ', 'UZB'),
  1411. (227, 'Vanuatu', 'VU', 'VUT'),
  1412. (228, 'Vatican City State (Holy See)', 'VA', 'VAT'),
  1413. (229, 'Venezuela', 'VE', 'VEN'),
  1414. (230, 'Viet Nam', 'VN', 'VNM'),
  1415. (231, 'Virgin Islands (British)', 'VG', 'VGB'),
  1416. (232, 'Virgin Islands (U.S.)', 'VI', 'VIR'),
  1417. (233, 'Wallis and Futuna Islands', 'WF', 'WLF'),
  1418. (234, 'Western Sahara', 'EH', 'ESH'),
  1419. (235, 'Yemen', 'YE', 'YEM'),
  1420. (236, 'Yugoslavia', 'YU', 'YUG'),
  1421. (237, 'Zaire', 'ZR', 'ZAR'),
  1422. (238, 'Zambia', 'ZM', 'ZMB'),
  1423. (239, 'Zimbabwe', 'ZW', 'ZWE'),
  1424. (240, 'Aaland Islands', 'AX', 'ALA');
  1425. INSERT INTO `zone_type` (`id`, `country_id`, `code`, `name`) VALUES
  1426. (255, 255, '--', 'No Zone'),
  1427. (1, 223, 'AL', 'Alabama'),
  1428. (2, 223, 'AK', 'Alaska'),
  1429. (3, 223, 'AS', 'American Samoa'),
  1430. (4, 223, 'AZ', 'Arizona'),
  1431. (5, 223, 'AR', 'Arkansas'),
  1432. (6, 223, 'AF', 'Armed Forces Africa'),
  1433. (7, 223, 'AA', 'Armed Forces Americas'),
  1434. (8, 223, 'AC', 'Armed Forces Canada'),
  1435. (9, 223, 'AE', 'Armed Forces Europe'),
  1436. (10, 223, 'AM', 'Armed Forces Middle East'),
  1437. (11, 223, 'AP', 'Armed Forces Pacific'),
  1438. (12, 223, 'CA', 'California'),
  1439. (13, 223, 'CO', 'Colorado'),
  1440. (14, 223, 'CT', 'Connecticut'),
  1441. (15, 223, 'DE', 'Delaware'),
  1442. (16, 223, 'DC', 'District of Columbia'),
  1443. (17, 223, 'FM', 'Federated States Of Micronesia'),
  1444. (18, 223, 'FL', 'Florida'),
  1445. (19, 223, 'GA', 'Georgia'),
  1446. (20, 223, 'GU', 'Guam'),
  1447. (21, 223, 'HI', 'Hawaii'),
  1448. (22, 223, 'ID', 'Idaho'),
  1449. (23, 223, 'IL', 'Illinois'),
  1450. (24, 223, 'IN', 'Indiana'),
  1451. (25, 223, 'IA', 'Iowa'),
  1452. (26, 223, 'KS', 'Kansas'),
  1453. (27, 223, 'KY', 'Kentucky'),
  1454. (28, 223, 'LA', 'Louisiana'),
  1455. (29, 223, 'ME', 'Maine'),
  1456. (30, 223, 'MH', 'Marshall Islands'),
  1457. (31, 223, 'MD', 'Maryland'),
  1458. (32, 223, 'MA', 'Massachusetts'),
  1459. (33, 223, 'MI', 'Michigan'),
  1460. (34, 223, 'MN', 'Minnesota'),
  1461. (35, 223, 'MS', 'Mississippi'),
  1462. (36, 223, 'MO', 'Missouri'),
  1463. (37, 223, 'MT', 'Montana'),
  1464. (38, 223, 'NE', 'Nebraska'),
  1465. (39, 223, 'NV', 'Nevada'),
  1466. (40, 223, 'NH', 'New Hampshire'),
  1467. (41, 223, 'NJ', 'New Jersey'),
  1468. (42, 223, 'NM', 'New Mexico'),
  1469. (43, 223, 'NY', 'New York'),
  1470. (44, 223, 'NC', 'North Carolina'),
  1471. (45, 223, 'ND', 'North Dakota'),
  1472. (46, 223, 'MP', 'Northern Mariana Islands'),
  1473. (47, 223, 'OH', 'Ohio'),
  1474. (48, 223, 'OK', 'Oklahoma'),
  1475. (49, 223, 'OR', 'Oregon'),
  1476. (50, 163, 'PW', 'Palau'),
  1477. (51, 223, 'PA', 'Pennsylvania'),
  1478. (52, 223, 'PR', 'Puerto Rico'),
  1479. (53, 223, 'RI', 'Rhode Island'),
  1480. (54, 223, 'SC', 'South Carolina'),
  1481. (55, 223, 'SD', 'South Dakota'),
  1482. (56, 223, 'TN', 'Tennessee'),
  1483. (57, 223, 'TX', 'Texas'),
  1484. (58, 223, 'UT', 'Utah'),
  1485. (59, 223, 'VT', 'Vermont'),
  1486. (60, 223, 'VI', 'Virgin Islands'),
  1487. (61, 223, 'VA', 'Virginia'),
  1488. (62, 223, 'WA', 'Washington'),
  1489. (63, 223, 'WV', 'West Virginia'),
  1490. (64, 223, 'WI', 'Wisconsin'),
  1491. (65, 223, 'WY', 'Wyoming'),
  1492. (66, 38, 'AB', 'Alberta'),
  1493. (67, 38, 'BC', 'British Columbia'),
  1494. (68, 38, 'MB', 'Manitoba'),
  1495. (69, 38, 'NL', 'Newfoundland'),
  1496. (70, 38, 'NB', 'New Brunswick'),
  1497. (71, 38, 'NS', 'Nova Scotia'),
  1498. (72, 38, 'NT', 'Northwest Territories'),
  1499. (73, 38, 'NU', 'Nunavut'),
  1500. (74, 38, 'ON', 'Ontario'),
  1501. (75, 38, 'PE', 'Prince Edward Island'),
  1502. (76, 38, 'QC', 'Quebec'),
  1503. (77, 38, 'SK', 'Saskatchewan'),
  1504. (78, 38, 'YT', 'Yukon Territory'),
  1505. (79, 81, 'NDS', 'Niedersachsen'),
  1506. (80, 81, 'BAW', 'Baden Würtemberg'),
  1507. (81, 81, 'BAY', 'Bayern'),
  1508. (82, 81, 'BER', 'Berlin'),
  1509. (83, 81, 'BRG', 'Brandenburg'),
  1510. (84, 81, 'BRE', 'Bremen'),
  1511. (85, 81, 'HAM', 'Hamburg'),
  1512. (86, 81, 'HES', 'Hessen'),
  1513. (87, 81, 'MEC', 'Mecklenburg-Vorpommern'),
  1514. (88, 81, 'NRW', 'Nordrhein-Westfalen'),
  1515. (89, 81, 'RHE', 'Rheinland-Pfalz'),
  1516. (90, 81, 'SAR', 'Saarland'),
  1517. (91, 81, 'SAS', 'Sachsen'),
  1518. (92, 81, 'SAC', 'Sachsen-Anhalt'),
  1519. (93, 81, 'SCN', 'Schleswig-Holstein'),
  1520. (94, 81, 'THE', 'Thringen'),
  1521. (95, 14, 'WI', 'Wien'),
  1522. (96, 14, 'NO', 'Niedersterreich'),
  1523. (97, 14, 'OO', 'Obersterreich'),
  1524. (98, 14, 'SB', 'Salzburg'),
  1525. (99, 14, 'KN', 'Kärnten'),
  1526. (100, 14, 'ST', 'Steiermark'),
  1527. (101, 14, 'TI', 'Tirol'),
  1528. (102, 14, 'BL', 'Burgenland'),
  1529. (103, 14, 'VB', 'Voralberg'),
  1530. (104, 204, 'AG', 'Aargau'),
  1531. (105, 204, 'AI', 'Appenzell Innerrhoden'),
  1532. (106, 204, 'AR', 'Appenzell Ausserrhoden'),
  1533. (107, 204, 'BE', 'Bern'),
  1534. (108, 204, 'BL', 'Basel-Landschaft'),
  1535. (109, 204, 'BS', 'Basel-Stadt'),
  1536. (110, 204, 'FR', 'Freiburg'),
  1537. (111, 204, 'GE', 'Genf'),
  1538. (112, 204, 'GL', 'Glarus'),
  1539. (113, 204, 'JU', 'Graubnden'),
  1540. (114, 204, 'JU', 'Jura'),
  1541. (115, 204, 'LU', 'Luzern'),
  1542. (116, 204, 'NE', 'Neuenburg'),
  1543. (117, 204, 'NW', 'Nidwalden'),
  1544. (118, 204, 'OW', 'Obwalden'),
  1545. (119, 204, 'SG', 'St. Gallen'),
  1546. (120, 204, 'SH', 'Schaffhausen'),
  1547. (121, 204, 'SO', 'Solothurn'),
  1548. (122, 204, 'SZ', 'Schwyz'),
  1549. (123, 204, 'TG', 'Thurgau'),
  1550. (124, 204, 'TI', 'Tessin'),
  1551. (125, 204, 'UR', 'Uri'),
  1552. (126, 204, 'VD', 'Waadt'),
  1553. (127, 204, 'VS', 'Wallis'),
  1554. (128, 204, 'ZG', 'Zug'),
  1555. (129, 204, 'ZH', 'Zrich'),
  1556. (130, 195, 'A Corua', 'A Corua'),
  1557. (131, 195, 'Alava', 'Alava'),
  1558. (132, 195, 'Albacete', 'Albacete'),
  1559. (133, 195, 'Alicante', 'Alicante'),
  1560. (134, 195, 'Almeria', 'Almeria'),
  1561. (135, 195, 'Asturias', 'Asturias'),
  1562. (136, 195, 'Avila', 'Avila'),
  1563. (137, 195, 'Badajoz', 'Badajoz'),
  1564. (138, 195, 'Baleares', 'Baleares'),
  1565. (139, 195, 'Barcelona', 'Barcelona'),
  1566. (140, 195, 'Burgos', 'Burgos'),
  1567. (141, 195, 'Caceres', 'Caceres'),
  1568. (142, 195, 'Cadiz', 'Cadiz'),
  1569. (143, 195, 'Cantabria', 'Cantabria'),
  1570. (144, 195, 'Castellon', 'Castellon'),
  1571. (145, 195, 'Ceuta', 'Ceuta'),
  1572. (146, 195, 'Ciudad Real', 'Ciudad Real'),
  1573. (147, 195, 'Cordoba', 'Cordoba'),
  1574. (148, 195, 'Cuenca', 'Cuenca'),
  1575. (149, 195, 'Girona', 'Girona'),
  1576. (150, 195, 'Granada', 'Granada'),
  1577. (151, 195, 'Guadalajara', 'Guadalajara'),
  1578. (152, 195, 'Guipuzcoa', 'Guipuzcoa'),
  1579. (153, 195, 'Huelva', 'Huelva'),
  1580. (154, 195, 'Huesca', 'Huesca'),
  1581. (155, 195, 'Jaen', 'Jaen'),
  1582. (156, 195, 'La Rioja', 'La Rioja'),
  1583. (157, 195, 'Las Palmas', 'Las Palmas'),
  1584. (158, 195, 'Leon', 'Leon'),
  1585. (159, 195, 'Lleida', 'Lleida'),
  1586. (160, 195, 'Lugo', 'Lugo'),
  1587. (161, 195, 'Madrid', 'Madrid'),
  1588. (162, 195, 'Malaga', 'Malaga'),
  1589. (163, 195, 'Melilla', 'Melilla'),
  1590. (164, 195, 'Murcia', 'Murcia'),
  1591. (165, 195, 'Navarra', 'Navarra'),
  1592. (166, 195, 'Ourense', 'Ourense'),
  1593. (167, 195, 'Palencia', 'Palencia'),
  1594. (168, 195, 'Pontevedra', 'Pontevedra'),
  1595. (169, 195, 'Salamanca', 'Salamanca'),
  1596. (170, 195, 'Santa Cruz de Tenerife', 'Santa Cruz de Tenerife'),
  1597. (171, 195, 'Segovia', 'Segovia'),
  1598. (172, 195, 'Sevilla', 'Sevilla'),
  1599. (173, 195, 'Soria', 'Soria'),
  1600. (174, 195, 'Tarragona', 'Tarragona'),
  1601. (175, 195, 'Teruel', 'Teruel'),
  1602. (176, 195, 'Toledo', 'Toledo'),
  1603. (177, 195, 'Valencia', 'Valencia'),
  1604. (178, 195, 'Valladolid', 'Valladolid'),
  1605. (179, 195, 'Vizcaya', 'Vizcaya'),
  1606. (180, 195, 'Zamora', 'Zamora'),
  1607. (181, 195, 'Zaragoza', 'Zaragoza'),
  1608. (182, 13, 'ACT', 'Australian Capital Territory'),
  1609. (183, 13, 'NSW', 'New South Wales'),
  1610. (184, 13, 'NT', 'Northern Territory'),
  1611. (185, 13, 'QLD', 'Queensland'),
  1612. (186, 13, 'SA', 'South Australia'),
  1613. (187, 13, 'TAS', 'Tasmania'),
  1614. (188, 13, 'VIC', 'Victoria'),
  1615. (189, 13, 'WA', 'Western Australia');
  1616. -- auto update last_modification fields ..
  1617. CREATE TRIGGER content_item_last_mod BEFORE UPDATE ON content_item FOR EACH ROW SET NEW.last_modification = NOW();
  1618. CREATE TRIGGER address_last_mod BEFORE UPDATE ON address FOR EACH ROW SET NEW.last_modification = NOW();
  1619. CREATE TRIGGER order_address_last_mod BEFORE UPDATE ON order_address FOR EACH ROW SET NEW.last_modification = NOW();
  1620. CREATE TRIGGER order_last_mod BEFORE UPDATE ON `order` FOR EACH ROW SET NEW.last_modification = NOW();
  1621. CREATE TRIGGER shopping_cart_last_mod BEFORE UPDATE ON shopping_cart FOR EACH ROW SET NEW.last_modification = NOW();
  1622. CREATE TRIGGER page_last_mod BEFORE UPDATE ON page FOR EACH ROW SET NEW.last_modification = NOW();
  1623. -- now we need some views for order totals, shipping, tax etc ..
  1624. /*
  1625. CREATE IF NOT EXISTS VIEW order_totals AS (
  1626. SELECT sum(p.retail_price) AS gross,
  1627. sum(p.cost) AS total_cost,
  1628. sum(p.weight) AS total_weight,
  1629. o.shipping_rate,
  1630. o.tax_rate,
  1631. (p.weight * o.shipping rate) AS shipping_cost
  1632. FROM order_product op
  1633. LEFT JOIN product p ON p.id = op.id
  1634. LEFT JOIN order o ON op.order_id = o.order_id
  1635. GROUP BY o.order_id
  1636. GROUP BY p.id
  1637. );
  1638. */