RAILS Database

RAILS uses at its heart a database to store all persistent data.
The preliminary database design focuses on entities related to rolling stock. Those entities exist in two categories, those related to modeling and those related to the railroads to be operated. The design work is being done using IBM InfoSphere Data Architect. The following ERD shows the preliminary database. The DDL to create the RAILS database can be found in GitHub.

Table AAR

Attribute Type Definition Comments
AAR_CODE CHAR(5)   NOT NULL, Primary Key
DEFINITION VARCHAR(2048)    

Table COMPANY
A enterprise that builds, assembles and or sells model train components including but limited to scenery materials, track, rolling stock, buildings, and electronics.

Attribute Type Definition Comments
CO_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
CO_TYPE CHAR(1)   v, m, or b
CO_NAME VARCHAR(50)    
CO_DESCRIPTION VARCHAR(1000)    
URL VARCHAR(100)    
PHONE VARCHAR(15)    
STREET VARCHAR(50)    
CITY VARCHAR(25)    
STATE CHAR(2)    
ZIP VARCHAR(10)    
COUNTRY VARCHAR(20)    

Table DCC_ATTRIBUTE

Attribute Type Definition Comments
DCC_ATTR_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
ATTR_NAME CHAR(5)  
ATTR_VALUE CHAR(5)    
RS_ID INTEGER   Foreign Key

Table IMAGES

Attribute Type Definition Comments
IMAGE_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
TITLE VARCHAR(25)  
PIC BLOB(4096)   INLINE LENGTH 92

Table INDUSTRY

Attribute Type Definition Comments
SHORT_NAME VARCHAR(10) An abbreviated form of identifying an entity conducting business. When that enterprise is an owner or lessees of rolling stock it is the “reporting marks”. NOT NULL, Primary Key
FULL_NAME VARCHAR(50)  
IND_TYPE VARCHAR(10)   NOT NULL
FUNCTION VARCHAR(250)  
PRODUCT VARCHAR(25)    
RAW_MATERIAL VARCHAR(25)    
PRODUCTION_RATE DOUBLE    
PRODUCTION_UNIT CHAR(5)    
CONSUMPTION_RATE DOUBLE    
CONSUMPTION_UNIT CHAR(5)    

Table MQTT_MSG
A communication using the ISO standard (ISO/IEC PRF 20922) publish-subscribe-based “lightweight” messaging protocol for use on top of the TCP/IP protocol.

Attribute Type Definition Comments
MSG_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
TOPIC VARCHAR(25) A string or filter of a subject, purpose or matter to organize publications and subscriptions. Topic Strings are used to send publications to subscribers and topic filters are used to subscribe to topics.
CONTENT VARCHAR(50) The substantive information contained within the MQTT message expressed in JavaScript Object Notation (JSON). NOT NULL
ACTION CHAR(1) An indicator to whether this transaction is a publish or subscribe message p or s
HANDLED_TIME TIMESTAMP The current time when this record has been processed by a RAILS component after the record was created.  
ACTION_TIME TIMESTAMP The current time when this record is created as a result of a publish or subscribe event. Triggered on insert

Table PROJECT

Attribute Type Definition Comments
PRJT_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
PRJT_TITLE VARCHAR(50)  
PRJT_TYPE VARCHAR(15)  
PRJT_DESCRIPTION VARCHAR(1000)  
START_DATE DATE    
COMPLETED_DATE DATE    
PRJT_NOTES VARCHAR(2000)    
PRIORITY VARCHAR(15)    

Table PROJECT_ITEM

Attribute Type Definition Comments
PRJT_ITEM_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
ITEM_ID INTEGER   NOT NULL
PRJT_ID INTEGER   NOT NULL
QUANTITY INTEGER  
RS_ID INTEGER   NOT NULL

Table PURCHASE

Attribute Type Definition Comments
PURCHASE_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
PURCHASE_DATE DATE  
VENDOR_ID INTEGER   NOT NULL

Table PURCHASEDITEM

Attribute Type Definition Comments
ITEM_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
PURCHASE_ID INTEGER   NOT NULL
PART_NUMBER VARCHAR(20)   NOT NULL
DESCRIPTION VARCHAR(50)  
ITEM_COST DECFLOAT(16)  
UNIT_QTY INTEGER The number of things packaged in a single item acquired. In many cases this will be one for rolling stock. Default of 1
NOTES VARCHAR(200)    
MANUFACTURE_ID INTEGER   NOT NULL
CONSUMED CHAR(1)    

Table ROLLINGSTOCK
Any vehicle that moves on a railway. It includes both powered and un-powered vehicles, for example locomotives, freight cars, tankers, coaches, and wagons.

Attribute Type Definition Comments
RS_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
RS_TYPE_ID VARCHAR(15)   NOT NULL
IMAGE_ID INTEGER  
AAR_CODE CHAR(5)  
BUILT_BY VARCHAR(10)  
REPORTING_MARKS VARCHAR(10) The code of one to four letters used to identify the owners or lessees painted on RS.  
RS_NUMBER VARCHAR(10)    
RFID VARCHAR(10) The unique 10 digit number of the Radio Frequency Identification (RFID) tag when read.
AVAILABILITY CHAR(1) The state of the RS as to whether it is able to be used and is at a dispatcher’s disposal for a given session or it is not. ‘y’ RS is available, ‘n’ RS is not available
LOCATION_ID VARCHAR(10)    
LENGTH DECIMAL(10 , 1)    
CAPACITY DECIMAL(10 , 1)    
CAP_UNITS CHAR(5)    
MODEL_WEIGHT DECIMAL(10 , 2)    
LT_WEIGHT INTEGER    
LD_MAX_WEIGHT INTEGER    
BUILT_DATE DATE    
IN_SERVICE DATE    
HEIGHT DECIMAL(10 , 1)    
NOTES VARCHAR(500)    
LAST_MAINTENANCE DATE    
LAST_UPDATE TIMESTAMP    

Table RS_TYPE

Attribute Type Definition Comments
RS_TYPE VARCHAR(15)   NOT NULL, Primary Key
CATEGORY VARCHAR(15)   NOT NULL
DESCRIPTION VARCHAR(500)  

Table TURNOUT

Attribute Type Definition Comments
TURNOUT_ID INTEGER A unique number generated from a sequence to provide a key for this record. NOT NULL, Primary Key
NAME VARCHAR(50)  
TURNOUT_TYPE VARCHAR(10)  
LOCATION VARCHAR(50)  
CNTRLR VARCHAR(10)  
COMMANDED_STATE VARCHAR(10)    
THROWN_SPEED INTEGER    
CLOSED_SPEED INTEGER  
KNOWN_STATE VARCHAR(10)    
IS_INVERTED CHAR(1)    
IS_LOCKED CHAR(1)    
LOCKED_MODE VARCHAR(15)    
LOCKED_BY CHAR(5)    
LAST_UPDT TIMESTAMP