<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; ">
<div>
<div>Hi All,</div>
<div><br>
</div>
<div>I have been working on defining the Language pack database schema. Here is a link to my review which is still a WIP - <a href="https://review.openstack.org/#/c/71132/3">https://review.openstack.org/#/c/71132/3</a>.</div>
<div>There are a couple of different opinions on how we should be designing the schema.</div>
<div><br>
</div>
<div>Language pack has several complex attributes which are listed here - <a href="https://etherpad.openstack.org/p/Solum-Language-pack-json-format">https://etherpad.openstack.org/p/Solum-Language-pack-json-format</a></div>
<div>We need to support search queries on language packs based on various criteria. One example could be 'find a language pack where type='java' and version>1.4'</div>
<div><br>
</div>
<div>Following are the two options that are currently being discussed for the DB schema:</div>
<div><br>
</div>
<div><b>Option 1:</b> Having a separate table for each complex attribute, in order to achieve normalization. The current schema follows this approach.</div>
<div>                   However, this design has certain drawbacks. It will result in a lot of complex DB queries and each new attribute will require a code change.</div>
<div><b>Option 2:</b> We could have a predefined subset of attributes on which we would support search queries. </div>
<div>                    In this case, we would define columns (separate tables in case of complex attributes) only for this subset of attributes and all other attributes will be a part of a json blob.</div>
<div>                    With this option, we will have to go through a schema change in case we decide to support search queries on other attributes at a later stage.</div>
<div><br>
</div>
<div>I would like to know everyone's thoughts on these two approaches so that we can take a final decision and go ahead with one approach.</div>
<div>Suggestions regarding any other approaches are welcome too!</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Arati</div>
</div>
<div><br>
</div>
</body>
</html>