Apache Derby понимает разницу между ссылками и внешним ключом

Я знаю, что внешний ключ - это ограничение, а ссылки - это пункт.

Это меня тоже смущает. Хотя это mysql, а не apache derby< /а>

Это говорит мне, как работает внешний ключ, но все еще смущает меня, я нашел в ответе также есть команда, подобная тому, что я сказал, ссылки без внешнего ключа

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

create table newTable(ColumnName varchar(100) references oldTable(ColumnName))

пример внешнего ключа в нижней части этого документа использует внешний ключ для создания ссылок

Может ли кто-нибудь помочь мне в том, что различия между использованием ссылок с внешним ключом и не использованием внешнего ключа

я нашел out в SQLite, если вы ссылаетесь без внешнего ключа, это то же самое, что и ссылки с внешним ключом, работает ли apache derby таким же образом?


person Loord    schedule 18.07.2018    source источник
comment
Вы спрашиваете, почему существует несколько вариантов синтаксиса для объявления отношений ссылочной целостности внешнего ключа? Если нет, уточните, что вы спрашиваете.   -  person Bryan Pendleton    schedule 18.07.2018
comment
Спасибо за ваш ответ. Я смущаюсь, что это вызовет на дерби, если я использую ссылки без внешнего ключа. Это так же, как когда я использую их обоих?   -  person Loord    schedule 19.07.2018
comment
Существуют различные типы ограничений внешнего ключа, и, к сожалению, также существуют различные варианты синтаксиса, которые позволяют использовать несколько способов указания одних и тех же ограничений внешнего ключа. Я думаю, что лучший способ получить очень точный ответ на свой вопрос — указать точно команды DDL, которые вы выдаете; предоставьте как можно больше подробностей, и это даст вам больше шансов получить полезный ответ.   -  person Bryan Pendleton    schedule 19.07.2018
comment
Одно конкретное различие между ограничением ссылочной целостности на уровне столбца и ограничением ссылочной целостности на уровне таблицы заключается в том, что ограничение на уровне столбца связывает только один столбец с другим отдельным столбцом, тогда как ограничение ссылочной целостности на уровне таблицы может связывать несколько столбцов одной таблицы. к нескольким столбцам другой таблицы. См.: db.apache.org/derby/docs/10.14/ref/ rrefsqlj13590.html   -  person Bryan Pendleton    schedule 19.07.2018
comment
Спасибо за помощь и терпение. Я только начинаю изучать apache. Я видел документ раньше, и это сбивает меня с толку. Я видел пример для внешнего ключа внизу документа и подумал, что если я дам ссылки на столбцы без внешнего ключа. И до сих пор работает! Это заставляет меня смущаться, что это добавление внешнего ключа по умолчанию для меня или это совершенно другое значение. Может быть, у меня есть неправильное понимание внешнего ключа и ссылок на самом деле значение и использование.   -  person Loord    schedule 19.07.2018


Ответы (1)


«Внешний ключ» — это набор атрибутов ссылочной таблицы. (Во многих реализациях нужно было бы говорить об «упорядоченном наборе атрибутов», потому что во многих реализациях порядок также имеет значение, но это отклонение от теории.)

Ограничение ссылочной целостности — это правило как таковое, в соответствии с которым [комбинация] значений, появляющихся в атрибутах внешнего ключа [в ссылочной таблице], должна отображаться как [комбинация] значений в ключевых атрибутах [в ссылочной таблице] . («ключевые атрибуты» — это использование термина «ключ», соответствующее реляционной теории. Они могли быть объявлены с помощью предложения UNIQUE вместо предложения KEY, но это всего лишь синтаксис. В теории все, что объявленный уникальным является ключом.)

Предложение REFERENCES является [наиболее популярным/наиболее используемым] средством для объявления ограничения ссылочной целостности. Это синтаксическое средство. Он всегда включает спецификацию внешнего ключа, но дополнительно определяет таблицу, на которую ссылаются, и ее атрибуты, на которые ссылаются.

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

person Erwin Smout    schedule 19.07.2018
comment
Спасибо за ваш ответ. Это означает, что в тот момент, когда я использую ссылки без внешнего ключа, это имеет то же значение, что и использование внешнего ключа со ссылками? (Большую часть времени) я видел, что вы сказали, что ссылки всегда включают спецификацию внешнего ключа key. Означает ли это, что он помогает вам добавлять внешний ключ по умолчанию в команду или имеет такое же значение. - person Loord; 19.07.2018
comment
Очень сложно понять, о чем вы спрашиваете. Если вы объявляете ограничение внешнего ключа (также известное как ограничение ссылочной целостности), то по определению вы должны так или иначе определить, что такое внешний ключ, и если где-то есть внешний ключ, то по определению он может быть только в контексте/как следствие существования ограничения ссылочной целостности. Не зацикливайтесь на синтаксических средствах для достижения этих целей. - person Erwin Smout; 19.07.2018
comment
Предложение REFERENCES — это самый старый способ объявить ограничение ссылочной целостности и соответствующий внешний ключ. Предложение CONSTRAINT — это более поздняя функция языка SQL, пытающаяся унифицировать (синтаксическую форму) спецификацию всех видов поддерживаемых ограничений. Если и когда используется для создания ограничения ссылочной целостности, его последствия должны быть полностью неотличимы от ограничения, созданного с использованием предложения REFERECES. Это всего лишь синтаксис. Если об этом был ваш вопрос. - person Erwin Smout; 19.07.2018
comment
Спасибо за ваше терпение и информацию. Думаю, я почти понял. Вы правы, я уделяю много внимания синтаксическим средствам и определениям. Спасибо за вашу помощь. - person Loord; 19.07.2018