"metadata": {},
"source": [
"`join` creates\n",
- "the [cross product](../../gloss.html#cross-product)\n",
+ "the [cross product](https://github.com/swcarpentry/bc/blob/master/gloss.md#cross-product)\n",
"of two tables,\n",
"i.e.,\n",
"it joins each record of one with each record of the other\n",
"We can tell which records from `Site`, `Visited`, and `Survey`\n",
"correspond with each other\n",
"because those tables contain\n",
- "[primary keys](../../gloss.html#primary-key)\n",
- "and [foreign keys](../../gloss.html#foreign-key).\n",
+ "[primary keys](https://github.com/swcarpentry/bc/blob/master/gloss.md#primary-key)\n",
+ "and [foreign keys](https://github.com/swcarpentry/bc/blob/master/gloss.md#foreign-key).\n",
"A primary key is a value,\n",
"or combination of values,\n",
"that uniquely identifies each record in a table.\n",
"Now that we have seen how joins work,\n",
"we can see why the relational model is so useful\n",
"and how best to use it.\n",
- "The first rule is that every value should be [atomic](../../gloss.html#atomic-value),\n",
+ "The first rule is that every value should be [atomic](https://github.com/swcarpentry/bc/blob/master/gloss.md#atomic-value),\n",
"i.e.,\n",
"not contain parts that we might want to work with separately.\n",
"We store personal and family names in separate columns instead of putting the entire name in one column\n",