Jane uses a term based database

 

A different type of information storage structure, one based on terms. A term is one or more words that has a unique definition.  There are no true synonyms, and therefore there are no two terms that mean the same thing (in context).

I have removed the need for data types. All values in the database have unique names, every use of a term  has a unique meaning. 

Terms have unique definitions what already have been defined. The English [any] language has already set these meanings in the Webster Dictionary,  as proper names, as slang, and as abbreviations.

Data usage, storage and transport formats are the same and therefore are never reformatted or parsed.  The format is independent of machine hardware.

Terms have the following qualifiers:

  • Singular or Plural
  • Plural terms can have 1 or more partitions to any depth (Invoices.2017.Dec.22)
  • Noun, Verb, Adjective, Adverb, Pronoun, Preposition, Conjunction, or Exclamation
  • Person, Place, Thing, Idea, Units,  Identifier, Proper Name
  • Tense, (past, present, future, past perfect, ...)
  • See  ("cancer" see "oncology")
  • See Also ("oncology" see also "treatment", "quality of life", ...)

Units define a term as a numeric value of a given type. Currency, Temperature, Speed, Length,  Area, Date, Time, Duration, Era, Volume, Count, Index, ....

Dates are absolute values (era, year, month, day)

Times are Greenwich Mean Time (GMT) of any granularity. (years, months, hours, minutes, seconds, milliseconds, picoseconds, femtoseconds,...).

Numeric values have no limits on digits or precision

There is no limits on size (size of a name or value)

Verbs (methods) are stored in the database (i.e. employee.print).

Note: the database is tied directly to the Jane compiler. Terms are in context (common knowledge, personal knowledge, application knowledge, project knowledge...)
 

Partition logic (Arrays, Matrix and Database Tables)

Defined as a user method, a change to this method will repartition the database
 Arrays: horizontal partitioned 

invoices~partitions =  // Jane compiler: a block quote after an "=" is a string
/*
function horizontal()		// this --> object to insert
{
	monthNames = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		
	if (! this.dataCreated) return "unknowndate";
		
	year  = this.dateCreated.getFullYear();		// Jane compiler: "var" is not required
	month = monthNames[this.dateCreated.getMonth()];
	day   = this.dateCreated.getDate();
				
	return year + "." + month + "." + day;
}	
*/

A = invoices				// every partition
A = invoices.2018;  			// 356 partitions
A = invoices.2018.Jan; 			// 31 partitions
A = invoices.2018.Jan.12;		// 1 partition;
A = invoices.201*;			// 365 * 10 partitions
A = invoices.2018.*.1;			// 12 partitions
A = invoices.2018.jan.[1,2];		// 2 partitions

invoice = { "dateCreated": new Date() };
invoices.add(invoice);  or  invoices += invoice;
alert(invoice~id + ') #' + invoice~partition.number + ' ' + invoice~partition.name);

--------------------------- remote partition example ---------------------------------

Partitions can be placed on different machines, granularity, formats, 
security, client and/or server;

	if ((new Date().getFullYear() - year) > 2) 
		return "jane://raspberrypi/invoices/" + year + "/" + month + '.cg2';

	return year + '.' + month + '.'day';

NOTE: Cg2 and Cg3 are application and version independent

------------------------------ Vertical and Horizontal ---------------------------------

employees~partitions =
/*
function horizontal();
{
	return this.company + '.' + this.department;
}

function vertical();
{
	parts = [ {"name":"index", "columns": ['id','name'], "readonly":true},
		  {"name":"hr", columns:['social_security_number','payRate','MailingAddress','HomeAddress'],security:'human resources'},
		  {"name":"full,columns:['*']}];
	return parts;
}

/*

A = employees.index.IBM.engineering;
B = employees.full.IBM.engineering;
C = B[A.find("Smith, John")];

Security and record locking can be placed on vertical partitions, horizontal partitions, columns and/or on individual values

Statistics of record counts and deleted counts are kept on each partitions along with use counts for each column.