Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да препратите към съставен първичен ключ в SQL

Ние декларираме ограничение на SQL FK (FOREIGN KEY), за да кажем, че стойност на подред за списък от колони винаги се появява другаде като стойност на подред за списък с колони, който формира SQL PK (PRIMARY KEY) или UNIQUE NOT NULL. Декларирайте го винаги, когато вече не се подразбира от други декларации. Той трябва да препраща към списъка с колони в деклариран SQL PK (PRIMARY KEY) или UNIQUE NOT NULL. Така че трябва да декларирате това в референтната таблица, дори ако това вече се подразбира от NOT NULL и по-малък съдържащ се PK или UNIQUE NOT NULL.

Така че имайте предвид, че SQL PK не е непременно PK в релационния смисъл на това, че е уникален, но не съдържа по-малък уникален набор от колони, т.е. е суперключ, който не съдържа по-малък суперключ, т.е. е минимален/нередуцируем суперключ, т.е. е CK ( кандидат ключ).

Тук може да се наложи да замените buildingno &roomno FKs по един, (buildingno, roomno) до Room :

CONSTRAINT SESSION_FK12
    FOREIGN KEY(BUILDINGNO,ROOMNO) REFERENCES ROOM(BUILDINGNO,ROOMNO)

Това може да са подходящи за значенията на вашите таблици - които всъщност вие не давате, така че не можем да знаем, можем само да гадаем. Например ако buildingno може също да бъде обявено за PK или UNIQUE NOT NULL в Room, което, когато roomno IS NOT NULL всъщност е в съответствие с и предполага (buildingno, roomno) може да бъде обявен за PK или UNIQUE NOT NULL, може би вашият FK е правилен но вашата Room декларациите са неадекватни.

Когато стойност на подред за списък с колони винаги се появява другаде като стойност на подред за списък с колони, това се нарича ограничение IND (зависимост от включване). Няма начин да декларирате не-FK IND в SQL; трябва да наложим чрез тригери. Това също може да е това, от което се нуждаете за вашия дизайн.

Можете да запазите FK от buildingno до Building , но се подразбира от FK, който предлагам, и FK в buildingno в Room препращане към Building .

позоваване на част от съставния първичен ключ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавяте и премахвате xml тагове на съществуващи данни в колона xmltype в oracle

  2. ROracle - dbWriteTable, колони с дати

  3. Идентификаторът на Fluent Nhibernate Oracle е твърде дълъг - проблем с името на псевдонима

  4. Схема за обратно инженерство (оракул) към ERD

  5. Oracle - ИЗБЕРЕТЕ DENSE_RANK OVER (ORDER BY, SUM, OVER и PARTITION BY)