Skip to main content

JSON/MySQL Schemas

As noted previously, there is a lot of overlap between the RDBMS world and the JSON world.

Identifiers
JSON is defined to allow identifiers of any kind of Unicode string, encoded in UTF-8 (or UTF-16, etc.). They begin and end with double quotation marks (U+0022), so included quotation marks and '\' must be escaped as \" or \\. Control characters (ASCII 0-x1F) must be escaped as well.

In practice, JSON identifiers conform to ECMAScript standards. There are some 68 reserved keywords (function, import, for, if, else, and so on) that should not be used as identifiers. Unexpected reserved words include abstract, await, debugger, delete, finally, instanceof, super, synchronized, transient, volatile, and yield. The spec makes a distinction between identifiers and IdentifierNames (specifically, array keys), but why risk it?

ECMAScript allows '$' and '_' anywhere in an identifier. Length or camelCasing are not part of the spec. As for length, there seems to be no limit, but as we're talking about JSON over the wire, shorter identifiers means fewer bytes transmitted.

MySQL 5.7 allows '$' and '_', too, along with 0-9, A-Z, a-z and they can do Unicode, though they're not as enthused about it as ECMAScript. Identifiers can begin with a digit, but should not consist of all digits. Identifiers cannot end with a space. Quotes for identifiers (the ` backtick) are optional. MySQL column (and table and database) names cannot be longer than 64 characters.


Comments

Popular posts from this blog

A JSON Db Product?

The last post "solved" the problem of many-to-many table joins by papering over the association table with a RESTful JSON interface. As long as we're using JSON, we might as well take advantage of multi-valued table cells. I'm naturally wondering where this leads. JSON identifiers and types and SQL identifiers and types overlap so much that their intersection is a useful subset. Camel-case fields in string, number, bool flavors. Many-to-many occurs often in the world: Students in Classes Actors in Films (musicians on recorded songs) Parts in Assemblies Customers and Products (joined by Orders) The generalized description is that a Table requires a unique identifier for each row. Tables list students, actors, films, customers, and so on.  An Association Table is has two or more foreign keys that match unique identifiers in other tables. The knowledge of how a FK maps to a specific Table is baked in--we wouldn't want a "table name" column....