@Override
	DBRecord createSymbolRecord(String name, long namespaceID, Address address,
			SymbolType symbolType, boolean isPrimary, SourceType source) {

		long nextID = symbolTable.getKey();

		// Avoid key 0, as it is reserved for the global namespace
		if (nextID == 0) {
			nextID++;
		}

		long addressKey = addrMap.getKey(address, true);

		DBRecord rec = symbolTable.getSchema().createRecord(nextID);
		rec.setString(SYMBOL_NAME_COL, name);
		rec.setLongValue(SYMBOL_ADDR_COL, addressKey);
		rec.setLongValue(SYMBOL_PARENT_ID_COL, namespaceID);
		rec.setByteValue(SYMBOL_TYPE_COL, symbolType.getID());
		rec.setByteValue(SYMBOL_FLAGS_COL, (byte) source.ordinal());

		// Sparse columns - these columns don't apply to all symbols.
		// they default to null unless specifically set. Null values don't consume space.

		rec.setField(SYMBOL_HASH_COL, computeLocatorHash(name, namespaceID, addressKey));

		if (isPrimary) {
			rec.setLongValue(SYMBOL_PRIMARY_COL, addressKey);
		}

		return rec;
	}
SymbolDatabaseAdapter for version 3

This version added additional sparse columns to store optional data specific to certain
symbol types.  The adhoc string data column was eliminated.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV4.java