#postgresql #relational-database
Вопрос:
Допустим, я хочу моделировать матрицы с различными формами и содержимым в реляционной базе данных (в моем случае PostgreSQL). Мы можем хранить несколько различных матриц. Каждая матрица содержит несколько строк и столбцов, каждая из которых может иметь некоторые свойства (например, имя, должность…). Мы можем хранить записи значений в каждой ячейке (комбинация строк и столбцов) матрицы.
Таким образом, у нас есть иерархическая структура с отношениями 1:n сверху вниз и строкой столбцом в качестве братьев и сестер, на которые ссылается запись.
Таблицы строк и столбцов будут иметь matrixId
внешний ключ. Таблица ввода будет содержать rowId
и columnId
в качестве внешних ключей.
Однако без дополнительных мер можно было бы создать запись, которая ссылается на строку и столбец, принадлежащие разным матрицам.
Какова наилучшая практика для обеспечения того, чтобы запись всегда ссылалась на строку и столбец с одним и тем же matrixId
?
Я предполагаю, что нам, вероятно, также понадобится matrixId
поле в записи, хотя это внесло бы некоторую избыточность.
Комментарии:
1. Извините, я не понимаю графики и нечеткого текста. Пожалуйста, представьте свою модель как DDL.
Ответ №1:
Да, включите matrixid
entry
и в (не обязательно первичный)^1 ключ row
и column
вместе с rowid
или columnid
, соответственно, и сошлитесь на это entry
.
И в качестве примечания: написано «PostgreSQL». «PostgreSQL» действительно больно…
^1: Хотя было бы разумно, что rowid
или columnid
являются порядковыми номерами строки или столбца в матрице, которые могли бы стать (matrixid, rowid)
или (matrixid, columnid)
хорошим кандидатом на первичный ключ.