122 lines
4.2 KiB
MySQL
122 lines
4.2 KiB
MySQL
|
-- LegacyWorlds Beta 6
|
||
|
-- PostgreSQL database scripts
|
||
|
--
|
||
|
-- Resource definitions
|
||
|
--
|
||
|
-- Copyright(C) 2004-2011, DeepClone Development
|
||
|
-- --------------------------------------------------------
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Common resource definitions
|
||
|
* ----------------------------
|
||
|
*
|
||
|
* The defs.resources table is used to describe the part of a resource's
|
||
|
* definition that's idependant
|
||
|
*/
|
||
|
|
||
|
CREATE TABLE defs.resources(
|
||
|
/* The resource identifier is a reference to an I18N string that
|
||
|
* represents the resource's name. It also serves as the table's
|
||
|
* primary key.
|
||
|
*/
|
||
|
resource_name_id INT NOT NULL PRIMARY KEY ,
|
||
|
|
||
|
/* Identifier of an I18N string which serves as the resource's
|
||
|
* description.
|
||
|
*/
|
||
|
resource_description_id INT NOT NULL ,
|
||
|
|
||
|
/* Identifier of an I18N string that names the resource's category. This
|
||
|
* field may be NULL for resources that do not belong to a category.
|
||
|
*/
|
||
|
resource_category_id INT ,
|
||
|
|
||
|
/* The weight is used when sorting resources. For resources that do not
|
||
|
* have a category, it is used directly. Otherwise, categories themselves
|
||
|
* are sorted by average weight of their contents, and resources in
|
||
|
* categories are sorted by weight.
|
||
|
*/
|
||
|
resource_weight INT NOT NULL
|
||
|
CHECK ( resource_weight > 0 )
|
||
|
);
|
||
|
|
||
|
CREATE UNIQUE INDEX idx_resources_description
|
||
|
ON defs.resources( resource_description_id );
|
||
|
CREATE INDEX idx_resources_category
|
||
|
ON defs.resources( resource_category_id );
|
||
|
CREATE INDEX idx_resources_weight
|
||
|
ON defs.resources( resource_weight );
|
||
|
|
||
|
ALTER TABLE defs.resources
|
||
|
ADD CONSTRAINT fk_resources_name
|
||
|
FOREIGN KEY ( resource_name_id ) REFERENCES defs.strings ,
|
||
|
ADD CONSTRAINT fk_resources_description
|
||
|
FOREIGN KEY ( resource_description_id ) REFERENCES defs.strings ,
|
||
|
ADD CONSTRAINT fk_resources_category
|
||
|
FOREIGN KEY ( resource_category_id ) REFERENCES defs.strings;
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Natural resources
|
||
|
* ------------------
|
||
|
*
|
||
|
* This table contains additional resource information that is used for
|
||
|
* natural resources only. These fields are used by the universe generator
|
||
|
* when it creates resource providers.
|
||
|
*/
|
||
|
CREATE TABLE defs.natural_resources (
|
||
|
/* Identifier of the resource definition for this natural resource, which
|
||
|
* also serves as the primary key for this table.
|
||
|
*/
|
||
|
resource_name_id INT NOT NULL PRIMARY KEY ,
|
||
|
|
||
|
/* Presence probability, used by the universe generator to determine
|
||
|
* whether some type of resource should be added to a planet or not. The
|
||
|
* generator will try to enforce this probability on the universe in
|
||
|
* general (that is, not assigning the resource to a planet will increase
|
||
|
* the probability of it being assigned to another).
|
||
|
*/
|
||
|
natres_p_presence DOUBLE PRECISION NOT NULL
|
||
|
CHECK ( natres_p_presence > 0
|
||
|
AND natres_p_presence < 1 ) ,
|
||
|
|
||
|
/* Average quantity in resource providers. */
|
||
|
natres_quantity_avg DOUBLE PRECISION NOT NULL
|
||
|
CHECK( natres_quantity_avg > 0 ) ,
|
||
|
/* Maximal deviation from the average quantity. */
|
||
|
natres_quantity_dev DOUBLE PRECISION NOT NULL
|
||
|
CHECK( natres_quantity_dev >= 0 ) ,
|
||
|
|
||
|
/* Average extraction difficulty assigned to resource providers */
|
||
|
natres_difficulty_avg DOUBLE PRECISION NOT NULL
|
||
|
CHECK( natres_difficulty_avg BETWEEN 0 AND 1 ) ,
|
||
|
/* Maximal deviation from the average extraction difficulty */
|
||
|
natres_difficulty_dev DOUBLE PRECISION NOT NULL
|
||
|
CHECK( natres_difficulty_dev >= 0 ) ,
|
||
|
|
||
|
/* Average recovery rate for resource providers */
|
||
|
natres_recovery_avg DOUBLE PRECISION NOT NULL
|
||
|
CHECK( natres_recovery_avg > 0
|
||
|
AND natres_recovery_avg <= 1 ) ,
|
||
|
/* Maximal deviation from the average recovery rate */
|
||
|
natres_recovery_dev DOUBLE PRECISION NOT NULL
|
||
|
CHECK( natres_recovery_dev >= 0 ) ,
|
||
|
|
||
|
/*
|
||
|
* For all values which include both an average and a maximal deviation,
|
||
|
* make sure the range defined by the deviation is still within valid
|
||
|
* boundaries for the value in question.
|
||
|
*/
|
||
|
CHECK( natres_quantity_avg - natres_quantity_dev > 0 ) ,
|
||
|
CHECK( natres_difficulty_avg + natres_difficulty_dev <= 1 ) ,
|
||
|
CHECK( natres_difficulty_avg - natres_difficulty_dev >= 0 ) ,
|
||
|
CHECK( natres_recovery_avg + natres_recovery_dev <= 1 ) ,
|
||
|
CHECK( natres_recovery_avg - natres_recovery_dev > 0 )
|
||
|
);
|
||
|
|
||
|
ALTER TABLE defs.natural_resources
|
||
|
ADD CONSTRAINT fk_natres_resource
|
||
|
FOREIGN KEY ( resource_name_id ) REFERENCES defs.resources;
|