Как называется столбец, используемый для объединения строк из разных таблиц? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть такая таблица:

name,height
Alice,1.75
Bob,1.74

, а затем у меня есть такая таблица:

name,DOB
Bob,1965-04-04
Alice,1972-09-27

И я хотел бы получить такую ​​таблицу:

name,DOB,height
Alice,1972-09-27,1.75
Bob,1965-04-04,1.74

Как называется столбец name в терминологии базы данных? Это первичный ключ ?

1 Ответ

1 голос
/ 30 марта 2020

Я не знаю, имеют ли они стандартное имя; Я всегда упоминал их как «столбцы соединения» как сокращение «столбцов, участвующих в соединении» или, если говорить о логических операциях, которые они содержат, «условия соединения» / «предикаты соединения»

Первичный ключ - это другое. Это столбец или набор столбцов, которые гарантированно уникально идентифицируют строку в таблице. Таблица не должна иметь PK, не должна иметь его для участия в объединениях, и объединения не должны использовать столбец ny, являющийся частью первичного ключа. Таблица должна иметь PK, чтобы служить целью внешнего ключа; механизм, который гарантирует, что данные в одной таблице имеют связанные данные в других данных

В вашем примере вы, вероятно, будете иметь все эти данные в той же таблице. Не разбивайте данные по таблицам без необходимости, особенно если соотношение между таблицами составляет 1: 1

Поскольку день рождения человека никогда не меняется, а меняется его рост, было бы более разумно иметь таблицу с днями рождения. основная таблица и таблица с высотами также имеют столбец данных, указывающий, когда была взята высота. Затем эта таблица будет иметь внешний ключ к основной таблице

Person
Name, DOB
Alice, 2000-01-01
Bob, 2001-01-01

Measurement
Name, Height, ReadingDate
Alice, 100, 2002-01-01
Alice, 110, 2003-01-01
Bob, 101, 2002-01-01
Bob, 112, 2003-02-01
Bob, 118, 2004-01-01

Measurement.Name не может быть PK, поскольку она не уникальна, но мы можем сказать, что Name + ReadingDate может быть (если бы у нас было правило) нет двух чтений в один и тот же день "). Такое использование двух столбцов в качестве PK не помешает Meansurement.Name быть внешним ключом, который ссылается на Person.Name (который является первичным ключом)

Note; Я не говорю, что отношения должны быть такими. Вы, конечно, могли бы сделать таблицу DOB внешним ключом для таблицы высот - просто в действительности это не имеет смысла, а имеет больше смысла. Эта структура может отвечать на такие вопросы, как «какого роста был Боб на свидании X», «какова средняя скорость роста числа мальчиков против девочек» или «исходя из экстраполяции, каким высоким может быть Алиса сейчас?»

...