Zwei foreign key?

andy1975

Benutzer
Beiträge
11
Mit Datenbanken habe ich praktisch gar nicht gearbeitet. Ich habe drei Tabellen mit MySQLWorkbench erstellt. Meine Frage ist, weshalb habe ich in der Tabelle Cablelist zwei foreign keys? Eigentlich benötige ich doch nur den foreign key von Cablenames, wenn ich nach dem Frage?


upload_2020-2-28_15-2-12.png
 

Anhänge

  • upload_2020-2-28_14-53-50.png
    upload_2020-2-28_14-53-50.png
    170,3 KB · Aufrufe: 1
  • upload_2020-2-28_14-54-11.png
    upload_2020-2-28_14-54-11.png
    114,5 KB · Aufrufe: 1
Werbung:
ich kann mit diesen Bildern nicht viel anfangen, kannst Du nicht einfach die CREATE TABLE - Befehle und die Definitionen der Constraints zeigen?
 
Ich verstehe nicht weshalb es den
PHP:
cablenames_cabletyps_idcabletyps
foreign key gibt, da ich ja den
PHP:
cablenames_idcablenames
in der cablelists Tabelle auch habe?
PHP:
$table->index(["cablenames_idcablenames", "cablenames_cabletyps_idcabletyps"], 'fk_cablelists_cablenames1_idx');

Hier der Code:
PHP:
Table name: cabletyps  Migration File: 2020_02_28_000000_create_cabletyps_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCabletypsTable extends Migration
{
    /**
     * Schema table name to migrate
     * @var string
     */
    public $tableName = 'cabletyps';

    /**
     * Run the migrations.
     * @table cabletyps
     *
     * @return void
     */
    public function up()
    {
        Schema::create($this->tableName, function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('idcabletyps');
            $table->string('cabletypscol', 45);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
     public function down()
     {
       Schema::dropIfExists($this->tableName);
     }
}



Table name: cablenames  Migration File: 2020_02_28_000000_create_cablenames_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCablenamesTable extends Migration
{
    /**
     * Schema table name to migrate
     * @var string
     */
    public $tableName = 'cablenames';

    /**
     * Run the migrations.
     * @table cablenames
     *
     * @return void
     */
    public function up()
    {
        Schema::create($this->tableName, function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('idcablenames');
            $table->string('cablenamecsol', 45);
            $table->integer('IndNr.');
            $table->string('number of cores', 45);
            $table->integer('cabletyps_idcabletyps');

            $table->index(["cabletyps_idcabletyps"], 'fk_cablenames_cabletyps_idx');


            $table->foreign('cabletyps_idcabletyps', 'fk_cablenames_cabletyps_idx')
                ->references('idcabletyps')->on('cabletyps')
                ->onDelete('no action')
                ->onUpdate('no action');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
     public function down()
     {
       Schema::dropIfExists($this->tableName);
     }
}



Table name: cablelists  Migration File: 2020_02_28_000000_create_cablelists_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCablelistsTable extends Migration
{
    /**
     * Schema table name to migrate
     * @var string
     */
    public $tableName = 'cablelists';

    /**
     * Run the migrations.
     * @table cablelists
     *
     * @return void
     */
    public function up()
    {
        Schema::create($this->tableName, function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('idcablelists');
            $table->string('cablelistscol', 45);
            $table->string('lengh', 45);
            $table->integer('cablenames_idcablenames');
            $table->integer('cablenames_cabletyps_idcabletyps');

            $table->index(["cablenames_idcablenames", "cablenames_cabletyps_idcabletyps"], 'fk_cablelists_cablenames1_idx');


            $table->foreign('cablenames_idcablenames', 'fk_cablelists_cablenames1_idx')
                ->references('idcablenames')->on('cablenames')
                ->onDelete('no action')
                ->onUpdate('no action');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
     public function down()
     {
       Schema::dropIfExists($this->tableName);
     }
}
 
Ja, aber das sind doch die CREATE TABLE - Befehle und die Definitionen der Constraints in der Migrationsdatei oder soll ich reinen MySql Code hochladen?
 
Zuletzt bearbeitet:
Hier ist der MySQL Code.

Code:
-- MySQL Script generated by MySQL Workbench
-- Sun Mar  1 11:46:02 2020
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `mydb` ;

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`cabletyps`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`cabletyps` (
  `idcabletyps` INT NOT NULL,
  `cabletypscol` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idcabletyps`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`cablenames`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`cablenames` (
  `idcablenames` INT NOT NULL,
  `cablenamecsol` VARCHAR(45) NOT NULL,
  `IndNr.` INT NOT NULL,
  `number of cores` VARCHAR(45) NOT NULL,
  `cabletyps_idcabletyps` INT NOT NULL,
  PRIMARY KEY (`idcablenames`, `cabletyps_idcabletyps`),
  INDEX `fk_cablenames_cabletyps_idx` (`cabletyps_idcabletyps` ASC),
  CONSTRAINT `fk_cablenames_cabletyps`
    FOREIGN KEY (`cabletyps_idcabletyps`)
    REFERENCES `mydb`.`cabletyps` (`idcabletyps`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`cablelists`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`cablelists` (
  `idcablelists` INT NOT NULL,
  `cablelistscol` VARCHAR(45) NOT NULL,
  `lengh` VARCHAR(45) NOT NULL,
  `cablenames_idcablenames` INT NOT NULL,
  `cablenames_cabletyps_idcabletyps` INT NOT NULL,
  PRIMARY KEY (`idcablelists`, `cablenames_idcablenames`, `cablenames_cabletyps_idcabletyps`),
  INDEX `fk_cablelists_cablenames1_idx` (`cablenames_idcablenames` ASC, `cablenames_cabletyps_idcabletyps` ASC),
  CONSTRAINT `fk_cablelists_cablenames1`
    FOREIGN KEY (`cablenames_idcablenames` , `cablenames_cabletyps_idcabletyps`)
    REFERENCES `mydb`.`cablenames` (`idcablenames` , `cabletyps_idcabletyps`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
 
Das Problem ist, dass ich in meiner View gar nicht nach dem
Code:
 `cablenames_cabletyps_idcabletyps`
fragen möchte, da der
Code:
cablenames_idcablenames` INT NOT NULL,
mir schon reichen würde. Anders gefragt: Läßt der
Code:
 `cablenames_cabletyps_idcabletyps`
Key sich auf Grund der Beziehungen
Code:
 INDEX `fk_cablelists_cablenames1_idx` (`cablenames_idcablenames` ASC, `cablenames_cabletyps_idcabletyps` ASC),
automatisch anlegen, wenn man in einen Dropdownmenü den
Code:
cablenames_idcablenames` INT NOT NULL,
auswählt?
 
Das Problem ist, dass ich in meiner View gar nicht nach dem
Code:
 `cablenames_cabletyps_idcabletyps`
fragen möchte,

Da ist keine View, und Foreign Key Constraints dienen nicht dazu festzulegen, wonach man fragen kann, sondern um Constraints durchzusetzen, also definierte Bedingungen im Datenmodell durchzusetzen.
 
Das die Constrains wichtig sind ist mir schon klar. Wenn man Daten in die Tabelle Cablelist einfügen möchte über eine View und man wählt `cablenames_idcablenames` aus, hat man dann durch den
CONSTRAINT `fk_cablelists_cablenames1` automatisch den `cablenames_cabletyps_idcabletyps`Key?
 
Ich habe Probleme das in Beziehung zu setzen, wenn ich eine View baue. Der Wert der Tabelle `cablenames` mit dem
FOREIGN KEY (`cabletyps_idcabletyps`) ist ja der gleiche Wert wie der Wert der Tabelle
`cablelists`mit dem Wert FOREIGN KEY (`cablenames_cabletyps_idcabletyps`). Wie kann man am besten über den FOREIGN KEY`fk_cablelists_cablenames1` auf den diesen Wert ohne eine Eingabe in der View zurückgreifen?
 
Werbung:
Zurück
Oben