Как узнать, когда создавать составное ограничение? - PullRequest
0 голосов
/ 11 января 2019

В настоящее время я изучаю SQL, и у меня есть физическая модель данных, которую нужно реализовать в коде Тем не менее, во время создания ограничений числа, появляющиеся рядом с FK и U, начали меня смущать. Рассмотрим диаграмму . РЕДАКТИРОВАТЬ: Добавлена ​​полная физическая модель.

Я знаю, что когда речь идет о первичных ключах, у нас должна быть одна PK-зависимость, все столбцы которой помечены как PK. Однако, когда дело касается ограничений FK или Unique, я сам в этом не уверен.

Предположим, я хочу создать ограничения FK для таблицы Opcao.

Должен ли я создать одно ограничение для нескольких столбцов, ссылаясь на соответствующие столбцы следующим образом:

ALTER TABLE MySchema.Opcao ADD CONSTRAINT [FK_SUPERKEY] FOREIGN KEY ([prova], [aluno], [pergunta], [dataRealizacao])
    REFERENCES MySchema.Integra([prova], [aluno], [pergunta], [dataRealizacao]);

Или создайте ограничение для каждого столбца, например:

ALTER TABLE MySchema.Opcao ADD CONSTRAINT [FK_OPCAO_PROVA] FOREIGN KEY ([prova])
    REFERENCES MySchema.Integra([prova]);
ALTER TABLE MySchema.Opcao ADD CONSTRAINT [FK_OPCAO_ALUNO] FOREIGN KEY ([aluno])
    REFERENCES MySchema.Integra([aluno]);
ALTER TABLE MySchema.Opcao ADD CONSTRAINT [FK_OPCAO_PERGUNTA] FOREIGN KEY ([pergunta])
    REFERENCES MySchema.Integra([pergunta]);
ALTER TABLE MySchema.Opcao ADD CONSTRAINT [FK_OPCAO_DATAREALIZACAO] FOREIGN KEY ([dataRealizacao])
    REFERENCES MySchema.Integra([dataRealizacao]);

Будут ли ограничения уникальности следовать той же логике? Как я знаю, когда делать то или другое?

1 Ответ

0 голосов
/ 11 января 2019

Вы хотите создать внешний ключ, состоящий из трех столбцов, которые должны совпадать со всеми тремя столбцами в ссылочной таблице? Тогда вы должны использовать, по моему мнению, ограничение для трех столбцов, потому что это семантика, которую вы хотите сказать. Одно ограничение для каждого подхода столбца имеет тот же эффект, но вам нужно немного подумать, чтобы получить интенсивность.

Несколько других советов: я не понимаю семантику схемы, потому что я не знаю язык, на котором названы сущности. Было бы проще, если бы они были названы на английском языке. Одна вещь, которую я видел, это столбец pergunta, который дублирован и должен быть согласован в opcao, таблица Integra и Pergunta, это может привести к проблемам. Я обычно помогал мне всегда создавать искусственный первичный ключ с автоинкрементом для каждой таблицы (даже таблиц соединения для отношений n к m) и всегда ссылаться на этот искусственный ключ. Тогда у вас будет меньше проблем (например, с учетом регистра), и схема, по моему мнению, будет легче понять.

...