The way I understand it, in order to represent an NxM matrix (of numbers) in a relational language, I would need to create NxM 4-tuples. Each 4-tuple would contain a globally unique ID representing that particular matrix, a row coordinate, a column coordinate, and a number. That's 4x the memory requirement of the usual matrix representation (where the numbers would be stored in contiguous memory). Matrix multiplication would be very slow. With a normal matrix data structure, you can retrieve a row from a 4x4 matrix by loading a single cache line, but to retrieve the 4 numbers in a row from the tuple store would require significant computation and memory bandwidth. This problem becomes much worse for image manipulation, where each pixel in a photograph is represented by a 6-tuple {guid, x, y, r, g, b}. The naive representation that I'm describing would be too slow and memory inefficient to be practical. So my impression has been that pure relational languages must be a lot less general purpose than conventional languages, which can support efficient multi-dimensional arrays quite easily. To fix the problem, it appears that you would need to extend a relational language with support for data structures.